Dlaczego warto korzystać z pip zamiast easy_install? [Zamknięte]

936

Tweet brzmi:

Nie używaj easy_install, chyba że lubisz dźgać się w twarz. Użyj pip.

Dlaczego warto korzystać z pip zamiast easy_install? Czy wina nie leży głównie w PyPI i autorach pakietów ? Jeśli autor prześle archiwum źródłowe crap (np. Brakujące pliki, brak pliku setup.py) do PyPI, zarówno pip, jak i easy_install zakończą się niepowodzeniem. Poza różnicami kosmetycznymi, dlaczego ludzie Python (jak w powyższym tweecie) wydają się zdecydowanie faworyzować pip nad easy_install?

(Załóżmy, że mówimy o easy_install z pakietu dystrybucyjnego, który jest zarządzany przez społeczność)

Sridhar Ratnakumar
źródło
74
Zanim zobaczyłem to pytanie, odpowiedziałem na nie związane pytanie, mówiąc: „nie używaj easy_install, użyj pip”. Teraz zastanawiam się, dlaczego to powiedziałem ...
Daniel Roseman,
21
Nadal spotykam się z pakietami, które powodują awarię pip, ale dobrze radzi sobie z easy_install, więc jestem również ciekawy tego.
kwatford
5
pyobjc-core jest przykładem pakietu, który działa z easy_install, ale nie z pip.
Marc Abramowitz
5
Wracając do Pythona cztery lata później, stan opakowania jest niezrozumiały. Jest rok 2014 i tylko się pogorszyło. Z tego, co rozumiem, setuptools pochłania distutils, chociaż oficjalne dokumenty Pythona są tego nieświadome , ale żaden z nich nie będzie częścią Pythona 3 , a pip kręci się jak trzecie koło (zamierzone słowo pun).
Andriy Drozdyuk
3
@drozzy: Zdarzyło ci się wrócić w najgorszym możliwym czasie - zaraz po tym, jak grupa głównych deweloperów zdecydowała, że ​​sprawy stały się tak bałaganem, że musieli zaangażować się w rozwiązanie problemu. setuptoolsnie jest częścią Python 3, ponieważ pipjest i jest to jedyna część, której potrzebują użytkownicy końcowi. (A programiści, którzy chcą rozpowszechniać na PyPI, mogą oczywiście pip install setuptoolsi wszystko, czego mogą chcieć.)
abarnert

Odpowiedzi:

304

Wiele odpowiedzi tutaj jest nieaktualnych w 2015 r. (Choć pierwotnie przyjęta odpowiedź Daniela Rosemana nie jest). Oto obecny stan rzeczy:

  • Pakiety binarne są teraz dystrybuowane jako koła ( .whlpliki) - nie tylko na PyPI, ale w repozytoriach stron trzecich, takich jak pakiety rozszerzeń Christopha Gohlke dla Windows . pipmoże obsługiwać koła; easy_installNie mogę.
  • Środowiska wirtualne (które są wbudowane w 3.4, lub mogą być dodane do 2.6 + / 3.1 + z virtualenv) stały się bardzo ważnym i widocznym narzędziem (i zalecane w oficjalnych dokumentach ); zawierają one po pipwyjęciu z pudełka, ale nawet nie działają poprawnie z easy_install.
  • distributePakiet, który zawiera easy_installnie jest już utrzymywany. Jego ulepszenia setuptoolszostały ponownie włączone setuptools. Próbując zainstalować distributepo prostu zainstalować setuptoolszamiast.
  • easy_install sam jest jedynie quasi utrzymany.
  • Wszystkie przypadki, w których niegdyś pipbyły gorsze - easy_installinstalowanie z rozpakowanego drzewa źródłowego, z repozytorium DVCS itp. - już dawno minęły; można pip install ., pip install git+https://.
  • pippochodzi z oficjalnymi pakietami Python 2.7 i 3.4+ z python.org, a pipbootstrap jest domyślnie dołączony, jeśli budujesz ze źródła.
  • Różne niekompletne fragmenty dokumentacji dotyczące instalowania, używania i budowania pakietów zostały zastąpione przez Podręcznik użytkownika Python Packaging . Własna dokumentacja Pythona na temat instalowania modułów Python odsyła teraz do tego podręcznika użytkownika i wyraźnie woła pipjako „preferowany program instalacyjny”.
  • pipPrzez lata dodawano inne nowe funkcje , które nigdy nie będą dostępne easy_install. Na przykład pipułatwia klonowanie pakietów witryn, budując plik wymagań, a następnie instalując go za pomocą jednego polecenia z każdej strony. Lub przekonwertować plik wymagań na lokalne repozytorium, którego można użyć do wewnętrznego opracowywania. I tak dalej.

Jedynym dobrym powodem, o którym wiem, że używam go easy_installw 2015 r., Jest szczególny przypadek korzystania ze wstępnie zainstalowanych wersji Apple w języku Python z systemem OS X 10.5–10.8. Od 10.5 Apple obejmuje easy_install, ale od 10.10 nadal nie obejmują pip. W wersji 10.9+ powinieneś nadal używać get-pip.py, ale w przypadku wersji 10.5-10.8 ma to pewne problemy, więc jest łatwiej sudo easy_install pip. (Ogólnie rzecz biorąc, easy_install pipto zły pomysł; chcesz to zrobić tylko w systemie OS X 10.5–10.8). Ponadto 10.5–10.8 obejmują readlinew sposób, który easy_installwie, jak się poruszać, ale pipnie, więc chcesz też sudo easy_install readlinejeśli chcesz to uaktualnić.

abarnert
źródło
9
@drozzy: Może. Ale weź pod uwagę, że za kolejne 5 lat moja odpowiedź będzie tak samo nieaktualna jak wszystkie pozostałe, podczas gdy Daniel Roseman będzie ponadczasowy. Ponadto moja odpowiedź nie byłaby tak dobra, gdyby nie mogła polegać na wskazaniu 5-letniej zaakceptowanej odpowiedzi, która pokazuje, dlaczego społeczność Python opóźniła się pip.
abarnert
2
Warto zauważyć, że niektóre spakowane wersje pipa były wadliwe, a pip sam się nie zaktualizował. Bez względu na to, czy uważasz to za ironię, czy nie, w takich przypadkach najłatwiejszym rozwiązaniem jest zrobienie easy_install -U piplub easy_install3 -U pip.
analytik
„ale nawet nie działają poprawnie z easy_install” To nie było moje doświadczenie, chociaż nie próbowałem od dłuższego czasu, ponieważ koła dominują teraz. Jednak pliki binarne Christopha Gohlkego były dystrybuowane jako jaja wykonywalne. Wywołanie easy_installich było jedynym sposobem na zainstalowanie tych pakietów w środowisku wirtualnym i nigdy nie spowodowało to zgagi. W jaki sposób nie easy_installdziała już z wirtualnymi env?
jpmc26
599

Z własnego wprowadzenia Iana Bickinga do pipa :

pip został pierwotnie napisany, aby poprawić na easy_install w następujący sposób

  • Wszystkie pakiety są pobierane przed instalacją. W rezultacie instalacja częściowo ukończona nie występuje.
  • Zadbano o przedstawienie użytecznych danych wyjściowych na konsoli.
  • Przyczyny działań są śledzone. Na przykład, jeśli pakiet jest instalowany, pip śledzi, dlaczego ten pakiet był wymagany.
  • Komunikaty o błędach powinny być przydatne.
  • Kod jest stosunkowo zwięzły i spójny, co ułatwia programowe używanie.
  • Pakiety nie muszą być instalowane jako archiwa jaj, mogą być instalowane płasko (zachowując metadane jaja).
  • Natywne wsparcie dla innych systemów kontroli wersji (Git, Mercurial i Bazaar)
  • Deinstalacja pakietów.
  • Proste definiowanie ustalonych zestawów wymagań i niezawodne odtwarzanie zestawu pakietów.
Daniel Roseman
źródło
63
Zaleta „komunikatów o błędach” jest ogromna, szczególnie dla nowych użytkowników. Łatwa instalacja słynie z wyrzucania dziesiątek błędów, które wyglądają na fatalne błędy, po prostu i tak zakończyła się pomyślnie instalacją, co utrudnia korzystanie z niej, dopóki nie nauczysz się ignorować większość wszystkiego, co mówi. Pip po prostu pomija mówienie tych rzeczy.
Brandon Rhodes,
1
@Glyph ma przewagę przy użyciu easy_install pipponad sudo apt-get install python-pip?
Dennis
2
Nie używaj easy_install poza virtualenv w dystrybucjach pakietowych: workaround.org/easy-install-debian
Federico
11
@Dennis: Podczas korzystania z sudo apt-getUbuntu / Debian instaluje pakiety Pythona, podczas /usr/lib/python/dist-packagesgdy sudo piplub sudo easy_installinstaluje się w nich /local/lib/python/site-packagesi niestety pakiety Debian / Ubuntu często mają różne nazwy, których pip nie zna. Najlepszym rozwiązaniem IMHO jest użycie virtualenv i pipzainstalowanie tam swoich pakietów.
Mark Mikofski
2
To wymaga aktualizacji.
Andriy Drozdyuk
248

Kolejnym - jak dotąd niewymienionym - powodem faworyzowania PIPa jest to, że jest to nowy upał i będzie nadal używany w przyszłości.

Poniższa infografika - z sekcji Bieżący stan pakowania w Przewodniku autostopowicza po pakowaniu 1.0 - pokazuje, że setuptools / easy_install zniknie w przyszłości.

wprowadź opis zdjęcia tutaj

Oto kolejna infografika z dokumentacji dystrybucji, która pokazuje, że Setuptools i easy_install zostaną zastąpione przez nową funkcjonalność - distribute i pip . Podczas gdy pip jest wciąż nowym trendem, Distribute połączył się z Setuptools w 2013 roku wraz z wydaniem Setuptools v0.7.

wprowadź opis zdjęcia tutaj

Matthew Rankin
źródło
47
Infografika FTW
WineSoaked
34
OTOH, druga grafika jest przestarzała od roku. dystrybucja osiągnie koniec życia i zostanie zastąpiona przez distutils2 (który będzie również w standardowej bibliotece Pythona, począwszy od wersji 3.3). Podstawowy instalator o nazwie pysetup jest dostarczany jako część lub distutils2, a pip będzie nadal oferował dodatkowe funkcje oprócz distutils2 w przyszłości.
Éric Araujo,
7
omg bardzo dziękuję. od lat jestem zdezorientowany opakowaniami python i cieszę się, że widzę półautorytatywną ścieżkę naprzód.
aaron
21
Ta „odpowiedź” jest tak nieaktualna i po prostu błędna, że ​​nawet nie jest śmieszna.
brak
172

Z dwóch powodów może być ich więcej:

  1. pip udostępnia uninstallpolecenie

  2. jeśli instalacja zakończy się niepowodzeniem w środku, pip pozostawi cię w czystym stanie.

Ned Batchelder
źródło
1
Podobnie jak teraz setuptoools. Eee ... w pewnym sensie. pythonhosted.org/setuptools/…
Andriy
116

WYMAGANIA.

Poważnie, używam tego w połączeniu z virtualenv każdego dnia.


SZYBKIE ZARZĄDZANIE ZALEŻNOŚCIĄ PODRĘCZNIK, FOLKI

Pliki wymagań pozwalają utworzyć migawkę wszystkich pakietów, które zostały zainstalowane przez pip. Dzięki enkapsulacji tych pakietów w środowisku wirtualnym możesz sprawić, że twoja baza kodów będzie działać na bardzo specyficznym zestawie pakietów i będzie mogła dzielić się tą bazą z innymi.

Z dokumentacji Heroku https://devcenter.heroku.com/articles/python

Tworzysz środowisko wirtualne i ustawiasz powłokę, aby go używała. (instrukcje bash / * nix)

virtualenv env
source env/bin/activate

Teraz wszystkie skrypty Pythona uruchamiane z tą powłoką będą używać pakietów i konfiguracji tego środowiska. Teraz możesz zainstalować pakiet lokalnie w tym środowisku bez konieczności instalowania go globalnie na komputerze.

pip install flask

Teraz możesz zrzucić informacje o tym, z którymi pakietami są instalowane

pip freeze > requirements.txt

Jeśli zaznaczyłeś ten plik do kontroli wersji, gdy ktoś inny dostanie Twój kod, może skonfigurować własne środowisko wirtualne i zainstalować wszystkie zależności za pomocą:

pip install -r requirements.txt

Za każdym razem, gdy możesz zautomatyzować takie nudy, jest to niesamowite.

Matthew Schinckel
źródło
1
To wydaje się być teraz częścią setuptools: pythonhosted.org/setuptools/…
Andriy
powinieneś użyć pipreqsdo uzyskania pliku wymagania.txt. Da tylko biblioteki związane z projektem, w którym wywołujesz pipreqs, więc wymagania.txt będą oparte na projekcie, a nie na virtualenv.
SeF
83

pip nie instaluje pakietów binarnych i nie jest dobrze przetestowany w systemie Windows.

Ponieważ system Windows domyślnie nie jest wyposażony w kompilator, często nie można z niego korzystać. easy_install może instalować pakiety binarne dla systemu Windows.

Fuzzyman
źródło
3
Ciekawe, nigdy o tym nie myślałem. pip również nie obsługuje funkcji „dodatków” setuptools, które są używane przynajmniej przez ludzi Zope.
Sridhar Ratnakumar,
1
Czy to wskazuje na potrzebę używania środowiska gcc w systemie Windows zamiast nalegania, aby pip instalował wstępnie skompilowane pliki binarne?
WineSoaked
18
„Właściwym” kompilatorem do użycia w systemie Windows jest Visual Studio (uważam, że 2008 dla najnowszych wersji Pythona). Zainstalowanie tego, nawet darmowej wersji, jest kłopotliwe. Normalny sposób instalowania rozszerzeń C na Windows jest ze wstępnie skompilowane pliki binarne. easy_install obsługuje to, pip nie.
fuzzyman
8
To jest główny powód, dla którego wciąż używam easy_install.
Randy Syring
14
Przez lata od udzielenia powyższej odpowiedzi nie jest już prawdą, że pip nie może instalować pakietów binarnych w systemie Windows ani na innych platformach. wheelBinarnego formatu dystrybucji sprawia, że to możliwe. Wiele pakietów innych firm z modułami rozszerzeń C jest teraz dystrybuowanych, ponieważ koła zbudowane dla różnych platform, a pip może je automatycznie zainstalować. Patrz na przykład pythonwheels.com
Ned Deily
76

AKTUALIZACJA: setuptoolspochłonęła, distributea nie na odwrót, jak niektórzy sądzili. setuptoolsjest na bieżąco z najnowszymi distutilszmianami i formatem koła. Stąd easy_installi pipsą mniej więcej na równi teraz.

Źródło: http://pythonhosted.org/setuptools/merge-faq.html#why-setuptools-and-not-distribute-or-another-name

użytkownik3341691
źródło
5
Dlaczego nie jest to więcej oceniane? Odpowiedzi są bardzo nieaktualne!
Andriy Drozdyuk
5
tak, najlepsze odpowiedzi są bardzo przestarzałe
WKordos
2
Dlatego easy_install i pip są teraz mniej więcej równe. To nonsens. easy_installwciąż jest tym, czym był przez długi czas, a pip ogromnie go poprawia. easy_installjest tylko częścią setuptoolsi prawdopodobnie jednym z najgorszych, dlatego pip chce go zastąpić.
Piotr Dobrogost
25

Jako dodatek do odpowiedzi fuzzymana:

pip nie instaluje pakietów binarnych i nie jest dobrze przetestowany w systemie Windows.

Ponieważ system Windows domyślnie nie jest wyposażony w kompilator, często nie można z niego korzystać. easy_install może instalować pakiety binarne dla systemu Windows.

Oto sztuczka w systemie Windows:

  • możesz użyć easy_install <package>do zainstalowania pakietów binarnych, aby uniknąć budowania pliku binarnego

  • możesz użyć pip uninstall <package> nawet jeśli użyłeś easy_install.

To tylko obejście, które działa dla mnie w systemie Windows. Właściwie zawsze używam pip, jeśli nie są zaangażowane żadne pliki binarne.

Zobacz aktualne pip doku: http://www.pip-installer.org/en/latest/other-tools.html#pip-compared-to-easy-install

Zapytam na liście mailingowej, co jest na to zaplanowane.

Oto najnowsza aktualizacja:

Będzie nowy obsługiwany sposób instalowania plików binarnych wheel ! Nie jest jeszcze w standardzie, ale prawie. Obecna wersja to wciąż wersja alfa: 1.0.0a1

https://pypi.python.org/pypi/wheel

http://wheel.readthedocs.org/en/latest/

Przetestuję wheel, tworząc za PySidepomocą instalatora OS Xwheel zamiast jaj. Wrócę i poinformuję o tym.

na zdrowie - Chris

Szybka aktualizacja:

Przejście do wheeljest prawie zakończone. Większość pakietów obsługuje wheel.

Obiecałem zbudować koła PySidei zrobiłem to latem ubiegłego roku. Działa świetnie!

WSKAZÓWKA: Kilka deweloperzy nie udało do tej pory obsługuje formatu koła, po prostu dlatego, że zapomnieć zastąpić distutilsprzez setuptools. Często łatwo jest przekonwertować takie pakiety, zastępując to jedno słowo w setup.py.

Christian Tismer
źródło
2
zaktualizowane powyżej - Myślę, że czekanie
dobiegło
Powinienem to zaktualizować, ponieważ koło stało się standardem wiosną 2014 roku. Właściwie uważam, że takich starych wątków nie należy zmieniać bez końca, ponieważ - stare odpowiedzi były dość dobre - łatwo jest wymienić wszystko, gdy zmienia się rzeczywistość. Ale czy to jest sprawiedliwe, kiedy nie ma pierwotnego powodu pytania?
Christian Tismer,
3

Właśnie spotkałem jeden specjalny przypadek, którego musiałem użyć easy_installzamiast pip, lub muszę pobrać kody źródłowe bezpośrednio.

Na opakowaniu GitPython, w wersji pipjest zbyt stary, co jest 0.1.7, a jeden z easy_installto najnowsza, który jest0.3.2.rc1 .

Używam Python 2.7.8. Nie jestem pewien co do mechanizmu podkładania easy_installi pip, ale przynajmniej wersje niektórych pakietów mogą się od siebie różnić, a czasem easy_installta z nowszą wersją.

easy_install GitPython
Landys
źródło
6
Sprawdziłem to teraz (patrz znacznik czasu) i nie jest to już prawdą: zarówno pip, jak i easy_install działały tak samo, dzięki czemu GitPython 0.3.5 dzisiaj. (Testowane tylko w systemie OS X Yosemite). Jaka jest twoja platforma? Zaktualizuj swój wpis, ponieważ jest on teraz mylący.
Christian Tismer,