2013-06-19 13 views
31

Ich habe ein Projekt mit mehreren Paketabhängigkeiten, deren Hauptanforderungen in requirements.txt aufgeführt sind. Wenn ich pip freeze rufe, druckt es die aktuell installierten Pakete als reine Liste. Ich würde es vorziehen, um auch ihre Abhängigkeitsbeziehungen, so etwas wie dieses:Gibt es eine Möglichkeit, die Abhängigkeitsbäume für Pip-Pakete anzuzeigen?

Werkzeug==0.8.3 
    Flask==0.9 
    Flask-Admin==1.0.6 

Und das in meinem aktuellen requirements.txt einfügen:

Flask==0.9 
    Jinja2==2.7 
    Werkzeug==0.8.3 

Jinja2==2.7 

Werkzeug==0.8.3 

Flask-Admin==1.0.6 
    Flask==0.9 
    Jinja2==2.7 
    Werkzeug==0.8.3 

Das Ziel, die Abhängigkeiten der einzelnen spezifischen Paket zu erkennen ist. Zum Beispiel für diesen Eingang:

Flask==0.9 
Flask-Admin==1.0.6 
Werkzeug==0.8.3 

würde Ich mag bekommen:

Flask==0.9 
    Jinja2==2.7 
Flask-Admin==1.0.6 
Werkzeug==0.8.3 

Gibt es eine Möglichkeit zeigen die Abhängigkeiten der installierten pip-Pakete?

+0

Ich weiß, dass Sie diese Frage vor vier Jahren gestellt und sorgfältig die Antwort markiert haben, die Sie schnell als die beste Antwort bekommen haben. Danke, dass du das getan hast. Ich würde mir jedoch die Antwort ansehen, die Sie ein Jahr später von Anthon erhalten haben. Pipeptree ist super! Anscheinend ist @naiquevin seit April 2015 nicht mehr auf der SO, aber er hat hier ein wirklich nettes Tool erstellt. –

Antwort

49

Sie einen Blick enthält nehmen sollte unter pipdeptree:

$ pip install pipdeptree 
$ pipdeptree -fl 
Warning!!! Cyclic dependencies found: 
------------------------------------------------------------------------ 
xlwt==0.7.5 
ruamel.ext.rtf==0.1.1 
xlrd==0.9.3 
openpyxl==2.0.4 
    - jdcal==1.0 
pymongo==2.7.1 
reportlab==3.1.8 
    - Pillow==2.5.1 
    - pip 
    - setuptools 

Es wird keine requirements.txt Datei generiert, wie Sie direkt angegeben haben. Allerdings ist die Quelle (255 Zeilen Python-Code) sollte relativ einfach sein, um Ihre Bedürfnisse zu modifizieren, oder alternativ können Sie (als @MERose angegeben ist in der pipdeptree 0,3 README) aus Verwendung:

pipdeptree --freeze --nowarn | grep -P '^[\w0-9\-=.]+' > requirements.txt 

Die 0,5-Version pipdeptree ermöglicht auch JSON-Ausgabe mit der Option --json, die leichter zu zerlegen ist, auf Kosten von weniger lesbar.

+0

Nach https://pypi.python.org/pypi/pipdeptree/0.3, 'pipdeptree | grep -P '^ \ w +' 'druckt eine requirements.txt. – MERose

+0

@MERose Danke, dass Sie das herausgebracht haben. Ich habe immer noch die Version 0.2 benutzt, als ich das geschrieben habe. – Anthon

+0

Es funktioniert nicht für 'bokeh' :(Dieses Paket hat spezifische Organisation von Anforderungen, damit Pip sie nicht zeigt, aber conda tut. – Sklavit

12

yolk können Abhängigkeiten für Pakete, sofern angezeigt, dass sie

  • setuptools über installiert wurden mit Metadaten
  • kam die Abhängigkeitsinformationen

    $ yolk -d Theano 
    Theano 0.6.0rc3 
        scipy>=0.7.2 
        numpy>=1.5.0 
    
+0

Danke. Dies ist keine vollständige Lösung, aber hilfreicher Nutzen. – tbicr

+0

Ich bin mir nicht sicher, ob es eine vollständige Lösung geben kann - das Problem ist, dass Abhängigkeitsinformationen nicht immer existieren (zum Beispiel für Pakete, die über 'distutils' installiert werden, das keine Paket-Metadaten unterstützt) –

+1

Eigelb hat keine py3k Unterstützung zum Zeitpunkt des Schreibens. – yegle