Ohne durch die Installation zu gehen, möchte ich schnell alle Pakete sehen, die pip install
installieren würde.Gibt es eine Möglichkeit, Pip-Abhängigkeiten/Anforderungen aufzulisten?
Antwort
Die nächstgelegene Sie mit pip direkt unter Verwendung des --no-install
Argument bekommen:
pip install --no-install <package>
Zum Beispiel ist dies die Ausgabe bei der Installation von Sellerie:
Downloading/unpacking celery
Downloading celery-2.5.5.tar.gz (945Kb): 945Kb downloaded
Running setup.py egg_info for package celery
no previously-included directories found matching 'tests/*.pyc'
no previously-included directories found matching 'docs/*.pyc'
no previously-included directories found matching 'contrib/*.pyc'
no previously-included directories found matching 'celery/*.pyc'
no previously-included directories found matching 'examples/*.pyc'
no previously-included directories found matching 'bin/*.pyc'
no previously-included directories found matching 'docs/.build'
no previously-included directories found matching 'docs/graffles'
no previously-included directories found matching '.tox/*'
Downloading/unpacking anyjson>=0.3.1 (from celery)
Downloading anyjson-0.3.3.tar.gz
Running setup.py egg_info for package anyjson
Downloading/unpacking kombu>=2.1.8,<2.2.0 (from celery)
Downloading kombu-2.1.8.tar.gz (273Kb): 273Kb downloaded
Running setup.py egg_info for package kombu
Downloading/unpacking python-dateutil>=1.5,<2.0 (from celery)
Downloading python-dateutil-1.5.tar.gz (233Kb): 233Kb downloaded
Running setup.py egg_info for package python-dateutil
Downloading/unpacking amqplib>=1.0 (from kombu>=2.1.8,<2.2.0->celery)
Downloading amqplib-1.0.2.tgz (58Kb): 58Kb downloaded
Running setup.py egg_info for package amqplib
Successfully downloaded celery anyjson kombu python-dateutil amqplib
Zugegeben, dies einige nicht verlassen in Form von temporären Dateien herumfuchteln, aber es erreicht das Ziel. Wenn Sie dies mit virtualenv tun (was Sie sein sollten), ist die Bereinigung so einfach wie das Entfernen des Verzeichnisses <virtualenv root>/build
.
Der Grund dafür ist, dass die Metadaten nicht außerhalb von setup.py existieren, also im Gegensatz zu 'rpm' oder' dpkg', wo Sie oben einen Metadatenindex erstellen und abfragen, dass 'pip' und' pypi' nicht funktionieren so arbeiten. Also müssen wir jede Anforderung übergehen. –
Dank @paul, Ihr Kommentar macht die Antwort komplett – lastoneisbearfood
Ich versuchte 'Pip --no-install Sellerie' aber ich erhalte den Fehler' keine solche Option: --no-install' (pip 1.2.1) –
Wenn und nur wenn das Paket installiert ist, können Sie pip show <package>
verwenden. Suchen Sie nach dem Requires:
abgelegt am Ende des Ausgangs. Dies bricht natürlich Ihre Anforderung, könnte aber dennoch nützlich sein.
Zum Beispiel:
$ pip --version
pip 7.1.0 [...]
$ pip show pytest
---
Metadata-Version: 2.0
Name: pytest
Version: 2.7.2
Summary: pytest: simple powerful testing with Python
Home-page: http://pytest.org
Author: Holger Krekel, Benjamin Peterson, Ronny Pfannschmidt, Floris Bruynooghe and others
Author-email: holger at merlinux.eu
License: MIT license
Location: /home/usr/.tox/develop/lib/python2.7/site-packages
Requires: py
Der Befehl pip install <package> --download <path>
sollte verwendet werden, wie in den Kommentaren von @radtek erwähnt, da ab 7.0.0 (2015.05.21), --no-install removed ist von pip
. Dies wird die erforderlichen Abhängigkeiten in <path>
herunterladen.
Lächerlich, ** '--download' wurde ebenfalls veraltet. ** Der kanonische Befehl _now_ scheint zu sein 'pip download
Die akzeptierte Antwort ist nicht länger relevant für aktuellere Versionen von pip und gibt keine sofortige Antwort, ohne mehrere Kommentare durchzulesen, daher gebe ich eine aktualisierte Antwort.
Dies wurde mit pip Versionen getestet 8.1.2 und 9.0.1.
Um die Ausgabe zu erhalten, ohne das aktuelle Verzeichnis auf Linux unübersichtlich verwenden
pip download [package] -d /tmp --no-binary :all:
-d
sagt das Verzeichnis pip, der beim Download in Dateien setzen sollte.
besser, benutzen Sie einfach dieses Skript mit dem Argument, die sein Paketname, um nur die Abhängigkeiten als Ausgabe zu erhalten:
#!/bin/sh
PACKAGE=$1
pip download $PACKAGE -d /tmp --no-binary :all: \
| grep Collecting \
| cut -d' ' -f2 \
| grep -v $PACKAGE
Auch verfügbar here.
** Das ist großartig und sollte die akzeptierte Antwort sein. ** Ehrlich gesagt, die Standard-'pip'-Schnittstelle ist schrecklich und verschlechtert sich mit jeder Übergabe weiter. Die Fähigkeit, Paketabhängigkeiten zu listen, ohne Pakete herunterzuladen, sollte Kernfunktionalität sein. Da dies nicht der Fall ist, ist das abschließende Bourne-Shell-Skript das nächstbeste. ' shakes_head>' –
Eine weitere Option ist ein Hilfsskript ähnlich wie this one zu verwenden, die die pip.req.parse_requirements
API verwendet requirements.txt
Dateien und einen distutils.core.setup
Ersatz zu analysieren setup.py
Dateien zu analysieren.
Falls Sie die Pakete bereits installiert haben, kann dieses Skript alle Abhängigkeiten von einer Anforderungsdatei abrufen, indem Sie den von @Sardathrion erwähnten Befehl pip show
ausführen.
import commands
fil = open("requirements.txt")
for package_line in fil.readlines():
if "==" in package_line:
package = package_line.split("==")[0]
elif "[" in package_line:
package = package_line.split("[")[0]
else:
package = package_line
output = commands.getoutput('pip show %s' % package)
try:
required = output.split("\n")[-1].split(":")[1]
except Exception as e:
required = ""
print "error {} in package {}".format(e, package)
if len(required) > 1:
print package, "-- ****%s***" % required
Verwandte: http://stackoverflow.com/q/9232568/183791 – dusan
Vielleicht [Dotter] (https://github.com/cakebread/yolk) helfen kann? – jadkik94
Eigelb sieht aus wie ein cooles Werkzeug. Danke für die Information. – lastoneisbearfood