web-dev-qa-db-de.com

Warum pip over easy_install verwenden?

A Tweet lautet:

Verwenden Sie nicht easy_install, es sei denn, Sie möchten sich selbst ins Gesicht stechen. Verwenden Sie pip.

Warum pip over easy_install verwenden? Liegt nicht das Fehler hauptsächlich bei PyPI und Paketautoren ? Wenn ein Autor einen Mistquellentarball (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 zu bevorzugen ?

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

920

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

  • Binärpakete werden jetzt als Wheels (.whl -Dateien) verteilt - nicht nur auf PyPI, sondern in Repositorys von Drittanbietern wie Christoph Gohlkes Erweiterungspaketen für Windows . pip kann mit Rädern umgehen; easy_install kann nicht.
  • Virtuelle Umgebungen (die in 3.4 integriert sind oder mit virtualenv zu 2.6 +/3.1 + hinzugefügt werden können) sind zu einem sehr wichtigen und herausragenden Werkzeug geworden (und empfohlen in den offiziellen Dokumenten ); Sie enthalten pip, funktionieren aber mit easy_install nicht richtig.
  • Das Paket distribute, das easy_install enthielt, wird nicht mehr verwaltet. Die Verbesserungen gegenüber setuptools wurden wieder mit setuptools zusammengeführt. Beim Versuch, distribute zu installieren, wird stattdessen nur setuptools installiert.
  • easy_install selbst ist nur quasi gepflegt.
  • Alle Fälle, in denen pipeasy_install unterlegen war - die Installation von einem entpackten Quellbaum, von einem DVCS-Repository usw. - sind lange vorbei. Sie können pip install ., pip install git+https://.
  • pip wird mit den offiziellen Paketen Python 2.7 und 3.4+ von python.org geliefert, und ein pip bootstrap ist standardmäßig enthalten, wenn Sie aus dem Quellcode erstellen.
  • Die verschiedenen unvollständigen Teile der Dokumentation zum Installieren, Verwenden und Erstellen von Paketen wurden durch das Python Packaging-Benutzerhandbuch ersetzt. Pythons eigene Dokumentation zur Installation von Python Modulen bezieht sich jetzt auf dieses Benutzerhandbuch und nennt pip ausdrücklich "das bevorzugte Installationsprogramm". .
  • Im Laufe der Jahre wurden weitere neue Funktionen zu pip hinzugefügt, die in easy_install niemals mehr verfügbar sein werden. Mit pip können Sie beispielsweise Ihre Site-Pakete auf einfache Weise klonen, indem Sie eine Anforderungsdatei erstellen und diese dann mit einem einzigen Befehl auf jeder Seite installieren. Oder Sie konvertieren Ihre Anforderungsdatei in ein lokales Repository, um es für die interne Entwicklung zu verwenden. Und so weiter.

Der einzige gute Grund, aus dem ich weiß, dass ich 2015 easy_install verwende, ist der Sonderfall, dass ich Apples vorinstallierte Python -Versionen mit OS X 10.5-10.8 verwende. Seit 10.5 enthält Apple easy_install, ab 10.10 jedoch immer noch nicht pip. Mit 10.9+ sollten Sie immer noch nur get-pip.py verwenden, aber für 10.5-10.8 hat dies einige Probleme, sodass es einfacher ist, Sudo easy_install pip zu verwenden. (Im Allgemeinen ist easy_install pip eine schlechte Idee; Sie möchten dies nur für OS X 10.5-10.8 tun.) Außerdem enthält 10.5-10.8 readline auf eine Weise, die easy_install zu täuschen weiß um, aber pip nicht, also möchten Sie auch Sudo easy_install readline, wenn Sie das aktualisieren möchten.

296
abarnert

Aus Ian Bickings eigenem Einführung in pip :

pip wurde ursprünglich geschrieben, um easy_install folgendermaßen zu verbessern

  • Alle Pakete werden vor der Installation heruntergeladen. Eine unvollständige Installation findet daher nicht statt.
  • Es wird darauf geachtet, dass nützliche Ausgaben auf der Konsole angezeigt werden.
  • Die Gründe für Maßnahmen werden verfolgt. Wenn zum Beispiel ein Paket installiert wird, merkt sich pip, warum dieses Paket benötigt wurde.
  • Fehlermeldungen sollten hilfreich sein.
  • Der Code ist relativ prägnant und zusammenhängend, was die programmgesteuerte Verwendung erleichtert.
  • Pakete müssen nicht als Egg-Archive installiert werden, sondern können einfach installiert werden (unter Beibehaltung der Egg-Metadaten).
  • Native Unterstützung für andere Versionskontrollsysteme (Git, Mercurial und Bazaar)
  • Deinstallation von Paketen.
  • Einfache Definition fester Anforderungssätze und zuverlässige Reproduktion eines Paketsatzes.
596
Daniel Roseman

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

Die folgende Infografik - aus dem Abschnitt Aktueller Verpackungsstatus im Per Anhalter durch die Verpackung v1. - zeigt, dass setuptools/easy_install in Zukunft verschwinden wird.

enter image description here

Hier ist eine weitere Infografik aus Distribute-Dokumentation , die zeigt, dass Setuptools und easy_install durch die neue Hotness ersetzt werden — Distribute und Pip . Während pip noch die neue Schärfe ist, wurde Distribute mit Setuptools im Jahr 2013 mit der Veröffentlichung von Setuptools v0.7 zusammengeführt .

enter image description here

246
Matthew Rankin

Zwei Gründe können mehr sein:

  1. pip liefert einen uninstall Befehl

  2. wenn eine Installation in der Mitte fehlschlägt, bleibt pip in einem sauberen Zustand.

170
Ned Batchelder

ANFORDERUNGEN Dateien.

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


TUTORIAL ZUM SCHNELLEN ABHÄNGIGKEITSMANAGEMENT, FOLKS

Mit den 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 auf eine ganz bestimmte Gruppe von Paketen beschränken 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 diese verwendet. (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, mit welchen Paketen installiert werden, sichern

pip freeze > requirements.txt

Wenn Sie diese Datei in die Versionskontrolle eingecheckt haben und eine andere Person Ihren Code erhält, kann sie ihre eigene virtuelle Umgebung einrichten und alle Abhängigkeiten installieren mit:

pip install -r requirements.txt

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

115

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

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

82
fuzzyman

UPDATE: setuptools hat distribute absorbiert, im Gegensatz zum Gegenteil, wie manche dachten. setuptools ist mit den neuesten distutils Änderungen und dem Radformat auf dem neuesten Stand. Daher sind easy_install und pip jetzt mehr oder weniger gleichberechtigt.

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

74
user3341691

Als Ergänzung zu Fuzzymans Antwort:

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

Da Windows standardmäßig keinen Compiler enthält, kann Pip dort oft nicht verwendet werden. easy_install kann Binärpakete für Windows installieren.

Hier ist ein Trick für Windows:

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

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

Dies ist nur eine Problemumgehung, 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 nachfragen, was dafür geplant ist.

Hier ist das neueste Update:

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

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

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

Ich werde wheel testen, indem ich ein OS X-Installationsprogramm für PySide mit wheel anstelle von Eiern erstelle. Wir werden zurückkommen und darüber berichten.

prost - Chris

Ein kurzes Update:

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

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

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

24

Gerade ist mir ein Sonderfall begegnet, bei dem ich easy_install anstelle von pip verwenden musste, oder ich muss die Quellcodes direkt abrufen.

Für das Paket GitPython ist die Version in pip zu alt, was 0.1.7 ist, während die von easy_install die neueste ist, was 0.3.2.rc1 ist.

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

easy_install GitPython
3
Landys