Die akzeptierte Antwort ist für aktuellere Versionen von pip nicht mehr relevant und gibt keine sofortige Antwort, ohne mehrere Kommentare zu lesen, sodass ich eine aktualisierte Antwort gebe.
Dies wurde mit den Pip-Versionen 8.1.2 , 9.0.1 , 10.0.1 und 18.1 getestet .
Um die Ausgabe zu erhalten, ohne Ihr aktuelles Verzeichnis unter Linux zu überladen, verwenden Sie
pip download [package]-d /tmp --no-binary :all:-v
-d teilt pip das Verzeichnis mit, in das der Download Dateien ablegen soll.
Verwenden Sie besser dieses Skript, wobei das Argument der Paketname ist, um nur die Abhängigkeiten als Ausgabe abzurufen:
Eine sehr ( sehr ) grobe Lesart der requirements.txtVerwendung dieser:< requirements.txt egrep -v "^#" | egrep -v "^$" | xargs -L 1 -I % sh -c 'echo %; echo "======"; ./deps.sh %; echo "";
Ian Clark
@ hans-musgrave machte einen guten Punkt in einer anderen Antwort, die ich vorher nicht bemerkt hatte, und aktualisierte daher das Bash-Skript, um nur Zeilen auszuschließen, die mit dem Paket zusammen mit dem Zeilenende oder dem Anfang eines gültigen Versionsspezifizierers übereinstimmen, anstatt einer Zeile, die dies tut enthält den Paketnamen.
Jmills
2
Einige Pakete bieten nur Binärdateien an, daher --no-binary :all:ist dies keine gute Idee. Ein Projekt, das nur Rad und nicht sdist versandte, würde scheitern.
wim
3
Dies endet mit dem Herunterladen und Kompilieren aller Abhängigkeitspakete, die sehr langsam sein können ....
Louis Yang
1
Beachten Sie, dass hier keine bereits installierten Abhängigkeiten aufgeführt sind (was für OP in Ordnung ist).
$ johnnydep requests
name summary
-----------------------------------------------------------------------------------------------
requests Python HTTP forHumans.├── certifi>=2017.4.17Python package for providing Mozilla's CA Bundle.
├── chardet<3.1.0,>=3.0.2 Universal encoding detector for Python 2 and 3
├── idna<2.7,>=2.5 Internationalized Domain Names in Applications (IDNA)
└── urllib3<1.23,>=1.21.1 HTTP library with thread-safe connection pooling, file post, and more.
Ein komplexerer Baum:
$ johnnydep ipython
name summary
-------------------------------------------------------------------------------------------------------------
ipython IPython:ProductiveInteractiveComputing├── appnope DisableAppNap on OS X 10.9├── decorator Better living through Pythonwith decorators
├── jedi>=0.10An autocompletion tool forPython that can be used for text editors.│└── parso==0.1.1 A PythonParser├── pexpect Pexpect allows easy control of interactive console applications.│└── ptyprocess>=0.5Run a subprocess in a pseudo terminal
├── pickleshare Tiny'shelve'-like database with concurrency support
├── prompt-toolkit<2.0.0,>=1.0.4Libraryfor building powerful interactive command lines inPython│├── six>=1.9.0Python2and3 compatibility utilities
│└── wcwidth Measures number of Terminal column cells of wide-character codes
├── pygments Pygmentsis a syntax highlighting package written inPython.├── setuptools>=18.5Easily download, build, install, upgrade,and uninstall Python packages
├── simplegeneric>0.8Simple generic functions (similar to Python's own len(), pickle.dump(), etc.)
└── traitlets>=4.2 Traitlets Python config system
├── decorator Better living through Python with decorators
├── ipython-genutils Vestigial utilities from IPython
└── six Python 2 and 3 compatibility utilities
Ich habe es heruntergeladen und benutze es, es ist ein großartiges Paket. ABER müssen keine Pakete installiert werden? Das OP fordert speziell einen Ansatz an, für den keine Installation erforderlich ist. Wichtig zum Vorbehalt.
So860
5
@ so860 Nein, die Pakete müssen nicht installiert werden. Das ist der springende Punkt, es funktioniert in einer isolierten Umgebung.
wim
Um es klar auszudrücken: Durch die Installation johnnydepselbst werden Abhängigkeiten installiert.
GPHemsley
1
@wim: Dieses Projekt ist pure Brillanz! Liebe es !
Jonathan DEKHTIAR
@ JonathanDEKHTIAR danke für die freundlichen Worte :)
wim
15
Hinweis: Die in dieser Antwort verwendete Funktion wurde 2014 nicht mehr unterstützt und 2015 entfernt . Bitte beachten Sie andere Antworten, die für moderne gelten pip.
Das nächste, was Sie mit pip direkt erreichen können, ist das folgende --no-installArgument:
pip install --no-install <package>
Dies ist beispielsweise 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 hinterlässt zwar einige Kruft in Form von temporären Dateien, aber es erreicht das Ziel. Wenn Sie dies mit virtualenv tun (was Sie sein sollten), ist die Bereinigung so einfach wie das Entfernen des <virtualenv root>/buildVerzeichnisses.
Der Grund dafür ist, dass die Metadaten außerhalb von setup.py nicht vorhanden sind. Anders als beispielsweise mit rpmoder dpkgwo Sie einen Metadatenindex darüber erstellen und abfragen pipund pypinicht so funktionieren. Wir müssen also jede Anforderung übergehen.
12
Ich habe es versucht, pip --no-install celeryaber ich erhalte den Fehler no such option: --no-install(Pip 1.2.1)
Colonel Panic
4
Ich denke, er meintepip install --no-install celery
Entropie
22
In meiner Pip-Version (1.5.4) ist das --no-installFlag veraltet.
Jian
4
Verwenden Sie für 1.5.4 pip install --download =.
No
14
Wenn und nur wenn das Paket installiert ist, können Sie verwenden pip show <package>. Suche nachRequires: Feld am Ende der Ausgabe. Dies verstößt eindeutig gegen Ihre Anforderungen, kann aber dennoch nützlich sein.
Beispielsweise:
$ pip --version
pip 7.1.0[...]
$ pip show pytest
---Metadata-Version:2.0Name: pytest
Version:2.7.2Summary: pytest: simple powerful testing withPythonHome-page: http://pytest.org
Author:HolgerKrekel,BenjaminPeterson,RonnyPfannschmidt,FlorisBruynoogheand others
Author-email: holger at merlinux.eu
License: MIT license
Location:/home/usr/.tox/develop/lib/python2.7/site-packages
Requires: py
Dies zeigt nur die direkten Anforderungen, alle transitiven Abhängigkeiten würden fehlen. Und es erfordert eine Installation. Es beantwortet die Frage also nicht wirklich.
wim
-1
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 wird entfernt aus pip. Dadurch werden die benötigten Abhängigkeiten heruntergeladen <path>.
Lächerlich, --downloadwurde auch veraltet. Der kanonische Befehl jetzt zu sein scheint , pip download <package> -d /tmp --no-binary :all:wie vorgeschlagen von der Karte Cheat .
Cecil Curry
-1
Eine andere Möglichkeit besteht darin, ein ähnliches Hilfsskript zu verwenden, das die pip.req.parse_requirementsAPI zum Parsen von requirements.txtDateien und einen distutils.core.setupErsatz zum Parsen von setup.pyDateien verwendet.
Falls Sie die Pakete bereits installiert haben, kann dieses Skript alle Abhängigkeiten aus einer Anforderungsdatei pip showabrufen, indem Sie den von @Sardathrion genannten Befehl ausführen.
Antworten:
Die akzeptierte Antwort ist für aktuellere Versionen von pip nicht mehr relevant und gibt keine sofortige Antwort, ohne mehrere Kommentare zu lesen, sodass ich eine aktualisierte Antwort gebe.
Dies wurde mit den Pip-Versionen 8.1.2 , 9.0.1 , 10.0.1 und 18.1 getestet .
Um die Ausgabe zu erhalten, ohne Ihr aktuelles Verzeichnis unter Linux zu überladen, verwenden Sie
-d
teilt pip das Verzeichnis mit, in das der Download Dateien ablegen soll.Verwenden Sie besser dieses Skript, wobei das Argument der Paketname ist, um nur die Abhängigkeiten als Ausgabe abzurufen:
Auch hier erhältlich .
quelle
requirements.txt
Verwendung dieser:< requirements.txt egrep -v "^#" | egrep -v "^$" | xargs -L 1 -I % sh -c 'echo %; echo "======"; ./deps.sh %; echo "";
--no-binary :all:
ist dies keine gute Idee. Ein Projekt, das nur Rad und nicht sdist versandte, würde scheitern.Schauen Sie sich mein Projekt Johnnydep !
Installation:
Anwendungsbeispiel:
Ein komplexerer Baum:
quelle
johnnydep
selbst werden Abhängigkeiten installiert.Das nächste, was Sie mit pip direkt erreichen können, ist das folgende
--no-install
Argument:Dies ist beispielsweise die Ausgabe bei der Installation von Sellerie:
Zugegeben, dies hinterlässt zwar einige Kruft in Form von temporären Dateien, aber es erreicht das Ziel. Wenn Sie dies mit virtualenv tun (was Sie sein sollten), ist die Bereinigung so einfach wie das Entfernen des
<virtualenv root>/build
Verzeichnisses.quelle
rpm
oderdpkg
wo Sie einen Metadatenindex darüber erstellen und abfragenpip
undpypi
nicht so funktionieren. Wir müssen also jede Anforderung übergehen.pip --no-install celery
aber ich erhalte den Fehlerno such option: --no-install
(Pip 1.2.1)pip install --no-install celery
--no-install
Flag veraltet.Wenn und nur wenn das Paket installiert ist, können Sie verwenden
pip show <package>
. Suche nachRequires:
Feld am Ende der Ausgabe. Dies verstößt eindeutig gegen Ihre Anforderungen, kann aber dennoch nützlich sein.Beispielsweise:
quelle
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 wird entfernt auspip
. Dadurch werden die benötigten Abhängigkeiten heruntergeladen<path>
.quelle
--download
wurde auch veraltet. Der kanonische Befehl jetzt zu sein scheint ,pip download <package> -d /tmp --no-binary :all:
wie vorgeschlagen von der Karte Cheat .Eine andere Möglichkeit besteht darin, ein ähnliches Hilfsskript zu verwenden, das die
pip.req.parse_requirements
API zum Parsen vonrequirements.txt
Dateien und einendistutils.core.setup
Ersatz zum Parsen vonsetup.py
Dateien verwendet.quelle
Falls Sie die Pakete bereits installiert haben, kann dieses Skript alle Abhängigkeiten aus einer Anforderungsdatei
pip show
abrufen, indem Sie den von @Sardathrion genannten Befehl ausführen.quelle
Ich zitiere eine alternative Lösung von @onnovalkering :
Auch wenn Sie conda verwenden ( wie von @ShpielMeister vorgeschlagen ), können Sie Folgendes verwenden:
um Informationen anzuzeigen, einschließlich Abhängigkeiten für eine bestimmte Version oder:
um Informationen anzuzeigen, einschließlich Abhängigkeiten zu allen unterstützten Versionen dieses Pakets.
quelle
boto3
ist "require_dist" null, aber das ist ein Projekt, das sicherlich Abhängigkeiten in den Metadaten aufweist .