Verfügt Python über ein Paket- / Modulverwaltungssystem?

145

Verfügt Python über ein Paket- / Modulverwaltungssystem, ähnlich wie Ruby über Rubygems verfügt, wo Sie dies tun können gem install packagename?

Bei der Installation von Python-Modulen werden nur Verweise auf angezeigt. Dazupython setup.py install müssen Sie jedoch zuerst das Paket suchen.

Tommy Chheng
quelle
3
Wenn Sie der Meinung sind, dass Pythons Paketindex PyPI klarere Anweisungen zur Installation von Paketen enthalten sollte, stimmen Sie ab und kommentieren Sie das Problem unter bitbucket.org/pypa/pypi/issue/149/…
Colonel Panic
Während es zu der Zeit aktuell war, ist der Link in dieser Frage jetzt zur Dokumentation der alten Distutils. Ich habe bugs.python.org/issue26014 eingereicht, um zu erläutern , dass diese Dokumente klarer sein müssen, dass sie nicht mehr als Endbenutzerdokumentation verwendet werden können (sie werden ausschließlich zum Nutzen von Tool-Implementierern aufbewahrt).
Ncoghlan

Antworten:

213

Jüngste Fortschritte

März 2014 : Gute Nachrichten! Python 3.4 wird mit Pip ausgeliefert. Pip ist seit langem Pythons De-facto-Standard-Paketmanager. Sie können ein Paket wie folgt installieren :

pip install httpie

Wahey! Dies ist die beste Funktion aller Python-Versionen. Es macht den Bibliotheksreichtum der Community für alle zugänglich. Neulinge sind aufgrund der unerschwinglichen Schwierigkeit der Einrichtung nicht länger von der Verwendung von Community-Bibliotheken ausgeschlossen.

Es gibt jedoch noch eine Reihe herausragender Frustrationen bei der Python-Verpackungserfahrung. Kumuliert machen sie Python für Neulinge sehr unwillkommen. Auch die lange Geschichte der Vernachlässigung (dh 14 Jahre lang kein Versand mit einem Paketmanager von Python 2.0 auf Python 3.3) hat der Community Schaden zugefügt. Ich beschreibe beide unten.

Hervorragende Frustrationen

Es ist wichtig zu verstehen, dass erfahrene Benutzer zwar in der Lage sind, diese Frustrationen zu umgehen, sie jedoch erhebliche Hindernisse für Python-Neulinge darstellen. Tatsächlich werden die Schwierigkeit und die allgemeine Unfreundlichkeit der Benutzer wahrscheinlich viele von ihnen abschrecken.

Die PyPI-Website ist nicht hilfreich

Jede Sprache mit einem Paketmanager verfügt über ein offizielles (oder quasi offizielles) Repository, über das die Community Pakete herunterladen und veröffentlichen kann. Python hat den Python Package Index PyPI. https://pypi.python.org/pypi

Vergleichen wir die Seiten mit denen von RubyGems und Npm (dem Node-Paketmanager).

  1. https://rubygems.org/gems/rails RubyGems-Seite für das Paketrails
  2. https://www.npmjs.org/package/express Npm-Seite für das Paketexpress
  3. https://pypi.python.org/pypi/simplejson/ PyPI-Seite für das Paketsimplejson

Sie sehen, dass die Seiten RubyGems und Npm mit einer einzeiligen Beschreibung des Pakets beginnen und anschließend ausführliche Anweisungen zur Installation des Pakets erhalten.

In der Zwischenzeit wehe jedem unglücklichen Python-Benutzer, der naiv zu PyPI navigiert. Unter https://pypi.python.org/pypi/simplejson/ finden sie keine solchen hilfreichen Anweisungen. Es gibt jedoch einen großen grünen "Download" -Link. Es ist nicht unvernünftig, ihm zu folgen. Aha, sie klicken! Ihr Browser lädt eine .tar.gzDatei herunter . Viele Windows-Benutzer können es nicht einmal öffnen, aber wenn sie durchhalten, können sie es schließlich extrahieren, dann ausführen setup.pyund schließlich mithilfe von Google setup.py install. Einige werden aufgeben und das Rad neu erfinden.

Das alles ist natürlich falsch. Der einfachste Weg, ein Paket zu installieren, ist ein Pip-Befehl. Aber PyPI erwähnte Pip nicht einmal. Stattdessen führte es sie auf einen archaischen und mühsamen Weg.

Fehler: vcvarsall.bat konnte nicht gefunden werden

Numpy ist eine der beliebtesten Bibliotheken von Python. Versuchen Sie es mit Pip zu installieren, Sie erhalten diese kryptische Fehlermeldung:

Fehler: vcvarsall.bat konnte nicht gefunden werden

Der Versuch, dies zu beheben, ist eine der häufigsten Fragen zum Stapelüberlauf : " Fehler: vcvarsall.bat konnte nicht gefunden werden "

Nur wenige Menschen haben Erfolg.

Zum Vergleich druckt Ruby in derselben Situation diese Nachricht, in der erklärt wird, was los ist und wie es behoben werden kann:

Bitte aktualisieren Sie Ihren PATH, um Build-Tools einzuschließen, oder laden Sie das DevKit von http://rubyinstaller.org/downloads herunter und folgen Sie den Anweisungen unter http://github.com/oneclick/rubyinstaller/wiki/Development-Kit

Das Veröffentlichen von Paketen ist schwierig

Ruby und Nodejs werden mit den Paketmanagern Gem (seit 2007) und Npm (seit 2011) ausgeliefert und haben die gemeinsame Nutzung von Communitys rund um GitHub gefördert. Npm macht das Veröffentlichen von Paketen so einfach wie das Installieren. Es verfügt bereits über 64.000 Pakete . RubyGems listet 72.000 Pakete auf . Der ehrwürdige Python- Paketindex listet nur 41 KB auf .

Geschichte

Python flog unter dem Motto " Batterien inklusive " und wurde bis 2014 ohne Paketmanager ausgeliefert.

Bis Pip war der De-facto-Standard ein Befehl easy_install. Es war absolut unzureichend. Das war kein Befehl zum Deinstallieren von Paketen.

Pip war eine massive Verbesserung. Es hatte die meisten Eigenschaften von Ruby's Gem. Leider war Pip - bis vor kurzem - ironischerweise schwer zu installieren. Tatsächlich bleibt das Problem eine der wichtigsten Python-Fragen zum Stapelüberlauf: " Wie installiere ich pip unter Windows? "

Oberst Panik
quelle
3
Für alle Interessierten schlägt PEP 439 eine Möglichkeit vor, den Pip-Installationsprozess zu rationalisieren, obwohl ich denke, dass dieses PEP nur Teil einer umfassenderen Strategie ist, die derzeit geprüft wird. Siehe auch Diskussion hier .
Cartroo
3
@Cartroo, das sind großartige Neuigkeiten! Python verdient einen Paketmanager, ich hoffe, die Entwickler können es schaffen.
Colonel Panic
Absolut längst überfällig. Ich hoffe auf jeden Fall, dass es zumindest in Python 3.4 gelingt. Leider bezweifle ich sehr, dass es auf 2.x zurückportiert wird, aber am Ende des Tunnels ist zumindest Licht. Hoffen wir nur, dass es kein entgegenkommender Drache ist ... (^_^)
Cartroo
6
Zu Pythons Verteidigung hatten neuere Sprachen wie Ruby und Node das Glück, die Fehler früherer Sprachen beobachten und vermeiden zu können. Trotzdem wünschte ich mir wirklich, dass die Paketverwaltung auf Python mehr Liebe und Fürsorge erhalten würde, daher bin ich froh, PEP 439 zu sehen, wie von @Cartroo hervorgehoben.
Dennis
Ich bin damit einverstanden, dass Rubys Paketverwaltung aus meiner (Endbenutzer-) Perspektive eine wunderbare Sache ist. Sie gem install Xscheint einfach auf allen Plattformen zu funktionieren. Wie haben sie das für Edelsteine ​​geschafft, die unter Windows eine C-Code-Kompilierung erfordern?
bsa
64

Der Python Package Index (PyPI) scheint Standard zu sein:

  • So installieren Sie ein Paket: pip install MyProject
  • So aktualisieren Sie ein Paket pip install --upgrade MyProject
  • So reparieren Sie eine Version eines Paketspip install MyProject==1.0

Sie können den Paketmanager wie folgt installieren:

curl -O http://python-distribute.org/distribute_setup.py
python distribute_setup.py
easy_install pip

Verweise:

Thomas Bratt
quelle
3
Dies ist die moderne Antwort.
Gringo Suave
6
Ich habe 20 Minuten im Internet gesucht und diese Antwort war nirgendwo. Ich danke dir sehr. Außerdem habe ich ernsthafte Zweifel an der Verwendung von Python, wenn die Dokumentation so schlecht ist ... dies sollte auf der Python-Hauptseite sein oder von Google oder so
Chris J
63

Und nur um einen Kontrast zu schaffen, gibt es auch Pip .

Ignacio Vazquez-Abrams
quelle
2
Vielen Dank! Warum wird pip nicht auf der Dokumentationsseite zur Installation von Python-Modulen erwähnt?
Tommy Chheng
Beachten Sie, dass pip keine Eier unterstützt, sondern nur Quellpakete installiert. Im Allgemeinen macht pip viele Dinge viel besser als easy_install, aber easy_install wird wahrscheinlich auf den meisten Unixen standardmäßig installiert, pip jedoch nicht.
Jeffrey Harris
8
@ Tommy Richtig! Wenn sich die Python-Entwickler um die Benutzererfahrung kümmern würden, würden sie Python mit einem Paketmanager (wie pip) ausliefern. Ruby wird mit Gem und Nodejs mit Npm ausgeliefert. stackoverflow.com/a/13445719/284795
Colonel Panic
21

Als Ruby- und Perl-Entwickler und lernender Python-Typ habe ich nicht festgestellt, dass easy_install oder pip RubyGems oder CPAN entsprechen.

Ich neige dazu, auf meinen Entwicklungssystemen die neuesten Versionen von Modulen auszuführen, während die Entwickler sie aktualisieren, und meine Produktionssysteme auf festgelegten Versionen einzufrieren. Sowohl RubyGems als auch CPAN erleichtern das Auffinden von Modulen, indem sie die verfügbaren Module auflisten und sie dann einzeln oder auf Wunsch einzeln oder in großen Mengen installieren und später aktualisieren.

easy_install und pip machen es einfach, ein Modul zu installieren, sobald ich es über eine Browsersuche gefunden oder auf andere Weise erfahren habe, aber sie sagen mir nicht, was verfügbar ist. Ich kann das zu aktualisierende Modul explizit benennen, aber die Apps sagen mir nicht, was aktualisiert wurde, und sie aktualisieren auch nicht alles in großen Mengen, wenn ich möchte.

Die grundlegende Funktionalität ist also in pip und easy_install enthalten, aber es fehlen Funktionen, die ich gerne sehen würde, um sie benutzerfreundlicher und benutzerfreundlicher zu machen und mit CPAN und RubyGems gleichzusetzen.

der Blechmann
quelle
Diese Antwort ist jetzt wirklich veraltet.
Ncoghlan
11

Ab mindestens Ende 2014 sollte die Anaconda Python-Distribution von Continuum Analytics mit dem Conda- Paketmanager in Betracht gezogen werden. Es löst die meisten schwerwiegenden Probleme, auf die Python im Allgemeinen stößt (Verwalten verschiedener Python-Versionen, Aktualisieren von Python-Versionen, Paketverwaltung, virtuelle Umgebungen, Windows / Mac-Kompatibilität), in einem zusammenhängenden Download.

Damit können Sie so ziemlich alles tun, was Sie sich mit Python wünschen, ohne das System ändern zu müssen. Meine nächste bevorzugte Lösung ist pip + virtualenv, aber Sie müssen entweder virtualenv in Ihrem System Python installieren (und Ihr System Python ist möglicherweise nicht die gewünschte Version) oder aus dem Quellcode erstellen . Anaconda macht diesen gesamten Vorgang zum Klicken auf eine Schaltfläche und fügt eine Reihe weiterer Funktionen hinzu.

anderspitman
quelle
7

Das wäre einfach zu installieren .

Kirk Strauser
quelle
1
Wenn Sie alle auf der Seite, die dies gesagt haben easy_install, ablehnen möchten , überprüfen Sie bitte zuerst die Daten. Das war ein gültiger Rat, als er vor fast 7 Jahren gegeben wurde . Ich denke nicht, dass wir Antwortenden dies regelmäßig überprüfen werden, um es zu aktualisieren, also ist Downvoting dumm.
Kirk Strauser
6

Es heißt Setuptools. Sie führen es mit dem Befehl "easy_install" aus.

Sie finden das Verzeichnis unter http://pypi.python.org/

Chris Long
quelle
5

Ich sehe weder MacPorts noch Homebrew, die in anderen Antworten hier erwähnt werden, aber da ich sie an anderer Stelle im Stapelüberlauf für verwandte Fragen sehe, füge ich meine eigenen 0,02 US-Dollar hinzu, die viele Leute MacPorts nicht nur als Paket betrachten Manager für Pakete im Allgemeinen (ab heute werden 16311 Pakete / Ports aufgelistet, 2931 passend zu "Python", wenn auch nur für Macs), aber auch als anständiger (vielleicht besserer) Paketmanager für Python-Pakete / Module:

Frage

"... mit welcher Methode verwalten Mac-Python-Entwickler ihre Module?"

Antworten

SciPy

"Macs (im Gegensatz zu Linux) haben keinen Paketmanager, aber es gibt einige beliebte Paketmanager, die Sie installieren können. Macports ..."

Ich überlege immer noch, ob ich MacPorts selbst verwenden soll oder nicht, aber im Moment neige ich mich in diese Richtung.

Osteoboon
quelle
1
Homebrew selbst sagt: Sie können Python-Pakete mit (der veralteten easy_install oder)pip install <your_favorite_package>
Simone
4

Installieren Sie dann unter Windows http://chocolatey.org/

choco install python

Öffne ein neues cmd-Fenster mit dem aktualisierten PATH. Als nächstes tun

choco install pip

Danach kannst du

pip install pyside
pip install ipython
...
hansvb
quelle
Ich wollte dies als Kommentar zu Thomas Bratts Antwort beantworten, aber ich habe nicht genug Ruf ...
Hansvb
3

Da hier niemand pipenv erwähnt hat, möchte ich meine Ansichten beschreiben, warum jeder es für die Verwaltung von Python-Paketen verwenden sollte.

Wie bei @ColonelPanic erwähnt, gibt es verschiedene Probleme mit dem Python- Paketindex sowie mit pip und virtualenv .

Pipenv löst die meisten Probleme mit pip und bietet zusätzliche Funktionen.

Pipenv-Funktionen

Pipenv soll pip und virtualenv ersetzen. Dies bedeutet, dass pipenv automatisch eine separate virtuelle Umgebung für jedes Projekt erstellt, um Konflikte zwischen verschiedenen Python-Versionen / Paketversionen für verschiedene Projekte zu vermeiden.

  • Ermöglicht wirklich deterministische Builds, während nur das angegeben werden kann, was Sie möchten.
  • Generiert und überprüft Datei-Hashes auf gesperrte Abhängigkeiten.
  • Installieren Sie die erforderlichen Pythons automatisch, wenn pyenv verfügbar ist.
  • Findet Ihr Projekt automatisch rekursiv zu Hause, indem Sie nach einer Pip-Datei suchen.
  • Generiert automatisch eine Pip-Datei, falls keine vorhanden ist.
  • Erstellt automatisch eine virtuelle Umgebung an einem Standardspeicherort.
  • Fügt einem Pipfile automatisch Pakete hinzu / entfernt sie, wenn sie deinstalliert / installiert werden.
  • Lädt automatisch .env-Dateien, falls vorhanden.

Wenn Sie bereits an Python-Projekten gearbeitet haben, werden Sie feststellen, dass diese Funktionen die Verwaltung von Paketen erheblich vereinfachen.

Andere Befehle

  • checkprüft auf Sicherheitslücken und stellt sicher, dass die PEP 508-Anforderungen von der aktuellen Umgebung erfüllt werden. ( was ich besonders danach für eine großartige Funktion halte - Schädliche Pakete auf PyPi )
  • graph zeigt Ihnen ein Abhängigkeitsdiagramm Ihrer installierten Abhängigkeiten.

Sie können hier mehr darüber lesen - Pipenv .

Installation

Die Installationsdokumentation finden Sie hier

PS: Wenn Sie mit den Python - Paket gern Arbeitsanforderungen , würden Sie gerne wissen , dass pipenv vom selben Entwickler Kenneth Reitz

Vaulstein
quelle
0

Poesie ist das, wonach Sie suchen. Es kümmert sich um das Abhängigkeitsmanagement, die virtuellen Umgebungen und die Ausführung.

0x32e0edfb
quelle