Warum pip over easy_install verwenden? [geschlossen]

936

Ein Tweet lautet:

Verwenden Sie easy_install nicht, es sei denn, Sie stechen sich gerne ins Gesicht. Verwenden Sie pip.

Warum pip over easy_install verwenden? Liegt der Fehler nicht hauptsächlich bei PyPI- und Paketautoren ? Wenn ein Autor Mistquellen-Tarball (z. B. fehlende Dateien, keine setup.py) auf PyPI hochlädt, schlagen sowohl pip als auch easy_install fehl. Abgesehen von kosmetischen Unterschieden, warum scheinen Python-Leute (wie im obigen Tweet) pip gegenüber easy_install stark zu bevorzugen?

(Nehmen wir an, wir sprechen von easy_install aus dem Distribute-Paket, das von der Community verwaltet wird.)

Sridhar Ratnakumar
quelle
74
Bevor ich diese Frage sah, beantwortete ich eine nicht verwandte Frage mit den Worten "benutze nicht easy_install, benutze pip". Jetzt frage ich mich, warum ich das gesagt habe ...
Daniel Roseman
21
Ich stoße immer noch auf Pakete, die dazu führen, dass pip fehlschlägt, aber easy_install funktioniert einwandfrei, daher bin ich auch neugierig.
Kwatford
5
pyobjc-core ist ein Beispiel für ein Paket, das mit easy_install, aber nicht mit pip funktioniert.
Marc Abramowitz
5
Wenn wir vier Jahre später zu Python zurückkehren, ist der Zustand der Verpackung völlig durcheinander. Es ist 2014 und es wurde nur noch schlimmer. Von dem, was ich verstehe Setuptools aufgenommen distutils, obwohl offizieller Python docs sind blind zu diesem, aber weder gehen Teil von Python 3 sein , und Pip hängt herum wie ein drittes Rad (Wortspiel beabsichtigt).
Andriy Drozdyuk
3
@drozzy: Du bist zufällig zum schlimmsten Zeitpunkt zurückgekommen - gleich nachdem eine Gruppe von Kernentwicklern entschieden hatte, dass die Dinge so durcheinander geraten waren, dass sie sich an der Lösung des Problems beteiligen mussten. setuptoolsist nicht Teil von Python 3, weil es pipist, und das ist der einzige Teil, den Endbenutzer benötigen. (Und Entwickler, die auf PyPI verteilen möchten, können natürlich pip install setuptoolsund alles andere, was sie wollen.)
abarnert

Antworten:

304

Viele der Antworten hier sind für 2015 veraltet (obwohl die ursprünglich akzeptierte von Daniel Roseman dies nicht ist). Hier ist der aktuelle Stand der Dinge:

  • Binärpakete werden jetzt als Räder ( .whlDateien) verteilt - nicht nur auf PyPI, sondern auch in Repositorys von Drittanbietern wie Christoph Gohlkes Erweiterungspaketen für Windows . pipkann mit Rädern umgehen; easy_installkann nicht.
  • Virtuelle Umgebungen (die in 3.4 integriert sind oder mit 2.6 + / 3.1 + hinzugefügt werden können virtualenv) sind zu einem sehr wichtigen und herausragenden Tool geworden (und in den offiziellen Dokumenten empfohlen ). Sie sind pipsofort einsatzbereit, funktionieren aber nicht einmal richtig easy_install.
  • Das enthaltene distributePaket easy_installwird nicht mehr gepflegt. Die Verbesserungen wurden setuptoolswieder zusammengeführt setuptools. Beim Versuch zu installieren distributewird setuptoolsstattdessen nur installiert .
  • easy_install selbst wird nur quasi gepflegt.
  • Alle Fälle, in denen pipdie easy_installInstallation von einem entpackten Quellbaum, von einem DVCS-Repo usw. früher unterlegen war, sind längst vorbei. du kannst pip install ., pip install git+https://.
  • pipwird mit den offiziellen Python 2.7- und 3.4+ -Paketen von python.org geliefert, und ein pipBootstrap ist standardmäßig enthalten, wenn Sie aus dem Quellcode erstellen.
  • Die verschiedenen unvollständigen Dokumentationen zum Installieren, Verwenden und Erstellen von Paketen wurden durch das Python Packaging-Benutzerhandbuch ersetzt . Pythons eigene Dokumentation zum Installieren von Python-Modulen verweist jetzt auf dieses Benutzerhandbuch und wird ausdrücklich pipals "bevorzugtes Installationsprogramm" bezeichnet.
  • Im pipLaufe der Jahre wurden weitere neue Funktionen hinzugefügt, die niemals verfügbar sein werden easy_install. Erleichtert beispielsweise pipdas Klonen Ihrer Site-Pakete, indem Sie eine Anforderungsdatei erstellen und diese dann mit einem einzelnen Befehl auf jeder Seite installieren. Oder um Ihre Anforderungsdatei in ein lokales Repo zu konvertieren, das für die interne Entwicklung verwendet werden soll. Und so weiter.

Der einzige gute Grund, den ich für easy_install2015 kenne, ist der Sonderfall der Verwendung von Apples vorinstallierten Python-Versionen mit OS X 10.5-10.8. Seit 10.5 hat Apple aufgenommen easy_install, aber ab 10.10 sind sie immer noch nicht enthalten pip. Mit 10.9+ sollten Sie immer noch nur verwenden get-pip.py, aber für 10.5-10.8 hat dies einige Probleme, so dass es einfacher ist sudo easy_install pip. (Im Allgemeinen easy_install pipist dies eine schlechte Idee. Sie möchten dies nur für OS X 10.5-10.8 tun.) 10.5-10.8 enthält außerdem readlineeine Methode, die easy_installweiß, wie man herumwirbelt, dies pipaber nicht tut, sodass Sie dies auch möchten sudo easy_install readlinewenn Sie das aktualisieren möchten.

abarnert
quelle
9
@drozzy: Vielleicht. Aber bedenken Sie, dass meine Antwort in weiteren 5 Jahren genauso veraltet sein wird wie alle anderen, während Daniel Rosemans zeitlos ist. Außerdem wäre meine Antwort nicht so gut, wenn ich mich nicht darauf verlassen könnte, auf eine 5 Jahre alte akzeptierte Antwort zu zeigen, die zeigt, warum die Python-Community pipin der Zwischenzeit in Verzug geraten ist.
abarnert
2
Es ist erwähnenswert, dass einige Paketversionen von pip fehlerhaft waren und pip sich nicht selbst aktualisieren konnte. Ob Sie es für ironisch halten oder nicht, in diesen Fällen ist die einfachste Lösung zu tun easy_install -U pipoder easy_install3 -U pip.
Analytik
"aber arbeite nicht einmal richtig mit easy_install" Dies war nicht meine Erfahrung, obwohl ich es eine Weile nicht versucht habe, da jetzt die Räder dominieren. Aber Christoph Gohlkes Binärdateien wurden früher als ausführbare Eier verteilt. Der Aufruf easy_installan ihnen war die einzige Art , wie ich die Pakete in eine virtuelle Umgebung installiert bekommen konnte, und es gab mir nie Sodbrennen. Inwiefern funktioniert das easy_installnicht mehr mit virtuellen Umgebungen?
jpmc26
599

Aus Ian Bickings eigener Einführung in pip :

pip wurde ursprünglich geschrieben, um easy_install auf folgende Weise zu verbessern

  • Alle Pakete werden vor der Installation heruntergeladen. Eine teilweise abgeschlossene Installation erfolgt daher nicht.
  • Es wird darauf geachtet, nützliche Ausgaben auf der Konsole anzuzeigen.
  • Die Gründe für Maßnahmen werden nachverfolgt. Wenn beispielsweise ein Paket installiert wird, verfolgt pip, warum dieses Paket erforderlich war.
  • Fehlermeldungen sollten hilfreich sein.
  • Der Code ist relativ präzise und zusammenhängend, was die programmgesteuerte Verwendung erleichtert.
  • Pakete müssen nicht als Eierarchiv installiert werden, sondern können flach installiert werden (unter Beibehaltung der Eiermetadaten).
  • Native Unterstützung für andere Versionskontrollsysteme (Git, Mercurial und Bazaar)
  • Deinstallation von Paketen.
  • Einfache Festlegung fester Anforderungssätze und zuverlässige Reproduktion eines Satzes von Paketen.
Daniel Roseman
quelle
63
Der Vorteil "Fehlermeldungen" ist enorm, insbesondere für neuere Benutzer. Easy-Install ist dafür bekannt, Dutzende von Fehlern auszuspucken, die wie schwerwiegende Fehler aussehen, nur um die Installation trotzdem erfolgreich durchzuführen, was die Verwendung schwierig macht, bis Sie lernen, fast alles zu ignorieren, was darin steht. Pip lässt es einfach aus, diese Dinge überhaupt zu sagen.
Brandon Rhodes
1
@Glyph gibt es einen Vorteil mit easy_install pipüber sudo apt-get install python-pip?
Dennis
2
Verwenden Sie easy_install nicht außerhalb einer virtuellen Umgebung für paketbasierte Distributionen: workaround.org/easy-install-debian
Federico
11
@ Tennis: Bei Verwendung von sudo apt-getUbuntu / Debian werden Python-Pakete installiert, /usr/lib/python/dist-packageswährend sudo pipoder sudo easy_installwerden in installiert, /local/lib/python/site-packagesund leider haben die Debian / Ubuntu-Pakete oft unterschiedliche Namen, mit denen pip nicht vertraut ist. Die beste Lösung ist meiner pipMeinung nach, virtualenv zu verwenden und Ihre Pakete dort zu installieren.
Mark Mikofski
2
Dies muss aktualisiert werden.
Andriy Drozdyuk
248

Ein weiterer - noch nicht erwähnter - Grund für die Bevorzugung von Pip ist, dass es sich um die neue Schärfe handelt, die auch in Zukunft verwendet wird.

Die folgende Infografik - aus dem Abschnitt " Aktueller Verpackungsstatus " im Per Anhalter durch Packaging v1.0 - zeigt, dass setuptools / easy_install in Zukunft nicht mehr verfügbar sein wird.

Geben Sie hier die Bildbeschreibung ein

Hier ist eine weitere Infografik aus der Distribute-Dokumentation, die zeigt, dass Setuptools und easy_install durch die neue Hotness ersetzt werden - Distribute und Pip . Während pip noch die neue Hotness ist, Verteilungs mit fusionierte Setuptool im Jahr 2013 mit der Veröffentlichung von Setuptool v0.7.

Geben Sie hier die Bildbeschreibung ein

Matthew Rankin
quelle
47
Infografiken FTW
WineSoaked
34
OTOH, die zweite Grafik ist seit einem Jahr veraltet. Distribute erreicht das Ende seiner Lebensdauer und wird von distutils2 abgelöst (das ab 3.3 auch in der Python-Standardbibliothek enthalten sein wird). Ein Basisinstallationsprogramm mit dem Namen pysetup wird als Teil oder als distutils2 bereitgestellt, und pip wird auch in Zukunft zusätzliche Funktionen über distutils2 bereitstellen.
Éric Araujo
7
omg vielen dank Ich bin seit Jahren durch Python-Verpackungen verwirrt und es ist ermutigend, einen halbautoritativen Weg vorwärts zu sehen.
Aaron
21
Diese "Antwort" ist so veraltet und einfach falsch, dass sie nicht einmal lustig ist.
Nur
172

Zwei Gründe, es kann mehr geben:

  1. pip liefert einen uninstallBefehl

  2. Wenn eine Installation in der Mitte fehlschlägt, werden Sie von pip in einem sauberen Zustand zurückgelassen.

Ned Batchelder
quelle
1
Setuptoools jetzt auch. Ähm ... irgendwie. pythonhosted.org/setuptools/…
Andriy Drozdyuk
116

ANFORDERUNGEN Dateien.

Im Ernst, ich benutze dies jeden Tag in Verbindung mit virtualenv.


QUICK DEPENDENCY MANAGEMENT TUTORIAL, FOLKS

Mit Anforderungsdateien können Sie einen Snapshot aller Pakete erstellen, die über pip installiert wurden. Indem Sie diese Pakete in eine virtuelle Umgebung einkapseln, können Sie Ihre Codebasis von einem ganz bestimmten Satz von Paketen abarbeiten lassen und diese Codebasis für andere freigeben.

Aus Herokus Dokumentation https://devcenter.heroku.com/articles/python

Sie erstellen eine virtuelle Umgebung und stellen Ihre Shell so ein, dass sie verwendet wird. (bash / * nix Anweisungen)

virtualenv env
source env/bin/activate

Jetzt verwenden alle Python-Skripte, die mit dieser Shell ausgeführt werden, die Pakete und die Konfiguration dieser Umgebung. Jetzt können Sie ein Paket lokal in dieser Umgebung installieren, ohne es global auf Ihrem Computer installieren zu müssen.

pip install flask

Jetzt können Sie die Informationen darüber sichern, mit welchen Paketen installiert wird

pip freeze > requirements.txt

Wenn Sie diese Datei in die Versionskontrolle eingecheckt haben und jemand anderes Ihren Code erhält, kann er seine eigene virtuelle Umgebung einrichten und alle Abhängigkeiten installieren mit:

pip install -r requirements.txt

Jedes Mal, wenn Sie Langeweile wie diese automatisieren können, ist das fantastisch.

Matthew Schinckel
quelle
1
Dies scheint jetzt auch Teil von setuptools zu sein: pythonhosted.org/setuptools/…
Andriy Drozdyuk
Sie sollten verwenden pipreqs, um die Datei require.txt abzurufen. Es werden nur die Bibliotheken angegeben, die sich auf das Projekt beziehen, in dem Sie pipreqs aufrufen, sodass anforderungs.txt auf dem Projekt und nicht auf der virtuellen Umgebung basiert.
SeF
83

pip installiert keine Binärpakete und ist unter Windows nicht gut getestet.

Da Windows standardmäßig nicht mit einem Compiler geliefert wird, kann pip dort häufig nicht verwendet werden. easy_install kann Binärpakete für Windows installieren.

Fuzzyman
quelle
3
Interessant, daran habe ich nie gedacht. pip unterstützt auch nicht die Setuptools "Extras" -Funktionen, die zumindest von den Zope-Leuten verwendet werden.
Sridhar Ratnakumar
1
Ist dies ein Hinweis darauf, dass unter Windows eine gcc-Umgebung erforderlich ist, anstatt darauf zu bestehen, dass pip vorgefertigte Binärdateien installiert?
WineSoaked
18
Der "richtige" Compiler für Windows ist Visual Studio (2008, glaube ich, für neuere Versionen von Python). Die Installation dieser Version, auch der kostenlosen Version, ist mühsam. Die normale Art der Installation von C-Erweiterungen unter Windows besteht in vorkompilierten Binärdateien. easy_install unterstützt dies, pip nicht.
Fuzzyman
8
Dies ist der Hauptgrund, warum ich immer noch easy_install verwende.
Randy Syring
14
In den Jahren seit der obigen Antwort ist es nicht mehr wahr, dass pip keine Binärpakete unter Windows oder auf anderen Plattformen installieren kann. Das wheelbinäre Verteilungsformat macht dies möglich. Viele Pakete von Drittanbietern mit C-Erweiterungsmodulen werden jetzt auch als Räder für verschiedene Plattformen vertrieben, und Pip kann sie automatisch installieren. Siehe zum Beispiel pythonwheels.com
Ned Deily
76

UPDATE: setuptoolshat absorbiert distributeund nicht umgekehrt, wie manche dachten. setuptoolsist mit den neuesten distutilsÄnderungen und dem Radformat auf dem neuesten Stand . Daher easy_installund pipsind jetzt mehr oder weniger gleichberechtigt.

Quelle: http://pythonhosted.org/setuptools/merge-faq.html#why-setuptools-and-not-distribute-or-another-name

user3341691
quelle
5
Warum wird das nicht mehr positiv bewertet? Die Antworten sind so veraltet!
Andriy Drozdyuk
5
Ja, die Top-Antworten sind extrem veraltet
WKordos
2
Daher sind easy_install und pip jetzt mehr oder weniger gleichberechtigt. Das ist Unsinn. easy_installEs ist immer noch das, was es schon lange ist und Pip verbessert es enorm. easy_installist nur ein Teil von setuptoolsund wohl einer der schlimmsten, weshalb pip versucht, ihn zu ersetzen.
Piotr Dobrogost
25

Als Ergänzung zu Fuzzymans Antwort:

pip installiert keine Binärpakete und ist unter Windows nicht gut getestet.

Da Windows standardmäßig nicht mit einem Compiler geliefert wird, kann pip dort häufig nicht verwendet werden. easy_install kann Binärpakete für Windows installieren.

Hier ist ein Trick unter Windows:

  • Sie können easy_install <package>Binärpakete installieren, um das Erstellen einer Binärdatei zu vermeiden

  • Sie können auch verwenden pip uninstall <package>, wenn Sie easy_install verwendet haben.

Dies ist nur eine Umgehung, die für mich unter Windows funktioniert. Eigentlich benutze ich immer pip, wenn keine Binärdateien beteiligt sind.

Siehe das aktuelle Pip-Doku: http://www.pip-installer.org/en/latest/other-tools.html#pip-compared-to-easy-install

Ich werde auf der Mailingliste fragen, was dafür geplant ist.

Hier ist das neueste Update:

Die neue unterstützte Methode zum Installieren von Binärdateien wird sein wheel! Es ist noch nicht im Standard, aber fast. Die aktuelle Version ist immer noch ein Alpha: 1.0.0a1

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

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

Ich werde testen, wheelindem ich ein OS X-Installationsprogramm für die PySideVerwendung wheelanstelle von Eiern erstelle . Ich werde zurückkommen und darüber berichten.

Prost - Chris

Ein schnelles Update:

Der Übergang zu wheelist fast vorbei. Die meisten Pakete unterstützen wheel.

Ich habe versprochen, Räder zu bauen PySide, und das habe ich letzten Sommer getan. Funktioniert super!

TIPP: Einige Entwickler haben das Radformat bisher nicht unterstützt, einfach weil sie vergessen haben, es distutilsdurch zu ersetzen setuptools. Oft ist es einfach, solche Pakete zu konvertieren, indem dieses einzelne Wort in ersetzt wird setup.py.

Christian Tismer
quelle
2
oben aktualisiert - ich denke das Warten ist fast vorbei ;-)
Christian Tismer
Ich sollte dies noch einmal aktualisieren, da das Rad im Frühjahr 2014 zum Standard geworden ist. Eigentlich denke ich, dass solche alten Threads nicht unendlich geändert werden sollten, weil es - die alten Antworten waren ziemlich gut - einfach ist, alles zu ersetzen, wenn sich die Realität ändert. Aber ist es fair, wenn der ursprüngliche Grund für eine Frage weg ist?
Christian Tismer
3

Ich habe gerade einen Sonderfall getroffen, den ich easy_installstattdessen verwenden musste pip, oder ich muss die Quellcodes direkt abrufen.

Für das Paket GitPythonist die Version in pipzu alt 0.1.7, während die Version von easy_installdie neueste ist 0.3.2.rc1.

Ich benutze Python 2.7.8. Ich bin mir nicht sicher über den Unterlegungsmechanismus von easy_installund pip, aber zumindest die Versionen einiger Pakete können sich voneinander unterscheiden, und manchmal easy_installist es die mit der neueren Version.

easy_install GitPython
Landys
quelle
6
Ich habe dies jetzt überprüft (siehe Zeitstempel) und es ist nicht mehr wahr: Sowohl pip als auch easy_install funktionierten gleich, was heute zu GitPython 0.3.5 führte. (Nur unter OS X Yosemite getestet). Was ist deine Plattform? Bitte aktualisieren Sie Ihren Eintrag, da er jetzt irreführend ist.
Christian Tismer