2012-06-21 12 views

Antwort

14

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.

+8

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. –

+0

Dank @paul, Ihr Kommentar macht die Antwort komplett – lastoneisbearfood

+8

Ich versuchte 'Pip --no-install Sellerie' aber ich erhalte den Fehler' keine solche Option: --no-install' (pip 1.2.1) –

8

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 
0

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.

+7

Lächerlich, ** '--download' wurde ebenfalls veraltet. ** Der kanonische Befehl _now_ scheint zu sein 'pip download -d/tmp --no-binary: alle:' als [vorgeschlagen] (https://stackoverflow.com/a/38531949/2809027) von [The Card Cheat] (https://stackoverflow.com/users/1210112/Der-Karten-Cheat). –

55

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.

+10

** 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. '' –

0

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.

-1

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 Themen