Gibt es eine Möglichkeit, die Abhängigkeitsbäume für Pip-Pakete anzuzeigen?

95

Ich habe ein Projekt mit mehreren Paketabhängigkeiten, wobei die Hauptanforderungen in aufgeführt sind requirements.txt. Wenn ich pip freezees aufrufe, werden die aktuell installierten Pakete als einfache Liste gedruckt. Ich würde es vorziehen, auch ihre Abhängigkeitsbeziehungen zu erhalten, so etwas wie:

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

Ziel ist es, die Abhängigkeiten der einzelnen Pakete zu ermitteln:

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

Und füge diese in meine aktuelle ein requirements.txt. Zum Beispiel für diese Eingabe:

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

Ich hätte gern:

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

Gibt es eine Möglichkeit, die Abhängigkeiten der installierten Pip-Pakete anzuzeigen?

tbicr
quelle
Ich weiß, dass Sie diese Frage vor vier Jahren gestellt und die Antwort, die Sie schnell erhalten haben, sorgfältig als die beste Antwort markiert haben. Danke dafür. Ich würde mir jedoch die Antwort ansehen, die Sie ein Jahr später von Anthon erhalten haben. Pipdeptree ist super !!! Anscheinend war @naiquevin seit April 2015 nicht mehr auf SO, aber er hat hier ein wirklich schönes Tool erstellt.
Rob Fagen

Antworten:

140

Sie sollten sich Folgendes ansehen 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.txtDatei generiert , wie Sie direkt angegeben haben. Die Quelle (255 Zeilen Python-Code) sollte jedoch relativ einfach an Ihre Bedürfnisse anzupassen sein. Alternativ können Sie (wie @MERose in der Pipdeptree 0.3 README angegeben) Folgendes verwenden:

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

Die 0.5-Version von pipdeptreeermöglicht auch die JSON-Ausgabe mit der --jsonOption, die einfacher maschinell analysiert werden kann, auf Kosten einer geringeren Lesbarkeit.

Anthon
quelle
Nach pypi.python.org/pypi/pipdeptree/0.3 , pipdeptree | grep -P '^\w+'druckt eine requirements.txt.
MERose
@MERose Danke, dass du darauf hingewiesen hast. Ich muss noch Version 0.2 verwendet haben, als ich das geschrieben habe.
Anthon
Es funktioniert nicht für bokeh:( Dieses Paket hat eine spezifische Organisation der Anforderungen, so dass Pip sie nicht anzeigt, aber conda.
Sklavit
12

Warnung: Nur py2 / Abbruchware

yolk kann Abhängigkeiten für Pakete anzeigen, sofern diese

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

    $ yolk -d Theano
    Theano 0.6.0rc3
      scipy>=0.7.2
      numpy>=1.5.0
    
ali_m
quelle
Vielen Dank. Dies ist keine vollständige Lösung, aber dennoch hilfreich.
tbicr
Ich bin nicht sicher, ob es eine vollständige Lösung geben kann - das Problem ist, dass Abhängigkeitsinformationen nicht immer vorhanden sind (zum Beispiel für Pakete, die über installiert distutilswurden und keine
Paketmetadaten
5
yolk hat zum Zeitpunkt des Schreibens keine py3k-Unterstützung.
Yegle