easy_install / pip lub apt-get

30

Jak zauważono na stronie wiki Ubuntu w Railsach , zalecane jest, aby klejnoty zarządzały twoimi zależnościami Rails / Ruby.

Jaka jest najlepsza praktyka w przypadku pakietów Python, takich jak Django? Czy powinienem zainstalować je poprzez apt-get, czy powinienem pozwolić easy_install / pip pobrać je z PyPi?

Leonard Ehrenfried
źródło

Odpowiedzi:

29

Istnieje kilka argumentów:

  1. Używaj repozytoriów / PPA, ponieważ zapewniają one stabilność i aktualność dzięki poprawkom bezpieczeństwa.

    Jest to w większości prawda. Jeśli na przykład instalujesz python-djangotak jak ja, otrzymujesz aktualizacje zabezpieczeń. Jest to dobre, ponieważ musisz tylko nadążać za apt, ale nadal musisz testować rzeczy przed wypchnięciem aktualizacji (chociaż testowanie powinno być w porządku za każdym razem).

    Można argumentować, że jeśli używałeś pip, nigdy nie możesz sprawdzić dostępności aktualizacji.

  2. Użyj, pipaby użyć odpowiednich „stabilnych” wersji.

    Nie ma co do tego wątpliwości: repozytoria pozostają w tyle za prawdziwym światem. Django to 2.0, ale repozytorium dla wersji LTS Ubuntu (z którą wiele osób trzyma się serwerów) dostajesz tylko 1,8 na Ubuntu 16.4 lts z Python 2, ale wciąż otrzymujesz aktualizacje zabezpieczeń.

    pipdaje ci najnowsze informacje przez cały czas. Musisz tylko je zaktualizować.

  3. Uaktualnienie instalacji Pythona w repozytorium może być koszmarem

    Kiedy uaktualniasz Ubuntu do następnej wersji, aktualizuje on wiele pakietów. Wiele rzeczy się zmienia. Wiem, że w Django oznacza to, że musisz uważać na niezgodności kodu, wycofania ... Ale to samo dotyczy wszystkich innych kodów Pythona.

    To samo dotyczy, pipale z piptobą możesz zrobić jedną rzecz na raz. Wiesz, co powoduje problemy, więc wiesz, gdzie szukać rozwiązania.

  4. pip+ virtualenvpozwala zachować osobność

    virtualenvpozwala mieć przenośne, małe środowiska Python. To pozwala mieć kilka różnych środowisk Pythona działających równolegle na tym samym komputerze.

    Oczywistym dobrodziejstwem wydaje się być konserwacja, ponieważ możesz zarządzać środowiskiem w taki sam sposób, jak zarządzasz kodem. Nawet przechowuj środowisko w VCS ... ale powinieneś pamiętać, że posiadanie dwunastu różnych virtualenvs oznacza dwanaście środowisk, które musisz sprawdzić i zaktualizować.


Edycja: Po strasznej serii aktualizacji na serwerze, aby przenieść go z Lucid do Precise, zmieniłem z mieszanej Apt + pip (nr 1 i 2) na czystą pip + virtualenv (nr 4). Zamiast mieć jednego virtualenv na stronę, mam jeden wspólny między kilkanaście stron. To działa na teraz.

Musiałem też napisać mały skrypt, który sprawdza status pakietów zainstalowanych z pipem. Jeśli są aktualizacje, muszę je zastosować ręcznie (co jest dobre, ponieważ testuję je lokalnie, w lokalnym virtualenv). To wszystko jest jeszcze trochę bardziej bolesne niż początkowo, ale na dłuższą metę znacznie lepsze.

Oli
źródło
10
  • Pakiety z repozytoriów

    Powinny być instalowane za każdym razem, gdy Twoja aplikacja jest w jakiś sposób specyficzna dla Ubuntu . Gwarantują stabilną wersję, którą można zainstalować na różnych komputerach Ubuntu, są obsługiwane, a czasem bardziej dojrzałe niż ta, którą otrzymujesz za pośrednictwem pip. Jeśli wdrażasz kilka serwerów Ubuntu lub piszesz aplikacje Ubuntu, użyj ich, jeśli są dostępne .

    Czasami zawierają także modyfikacje specyficzne dla Ubuntu.

  • pip vs easy_install

    Nie ma wiele do powiedzenia na ten temat, jak ujął to haker Django James Bennett:

    Proszę, na miłość Guido, przestań używać setuptools i easy_install, zamiast tego użyj distutils i pip.

    Aby uzyskać dogłębną dyskusję na temat różnic, zobacz O opakowaniach Jamesa Bennetta (z django) i Kilka poprawek do „O opakowaniach” Iana Bickinga (z Mozilli).

Jeśli chcesz być bezpieczny, wypróbuj swoje wdrożenia pip za pomocą virtualenv . Daje to izolowane środowisko Pythona, dzięki czemu masz pewność, że aplikacja będzie działać na dowolnym komputerze.

Poczekaj chwilę, ufam, że niektórzy ludzie się ze mną nie zgodzą.

Stefano Palazzo
źródło