C'è un modo per mostrare gli alberi delle dipendenze per i pacchetti pip?


96

Ho un progetto con più dipendenze del pacchetto, i requisiti principali sono elencati in requirements.txt. Quando lo chiamo pip freeze, stampa i pacchetti attualmente installati come semplice elenco. Preferirei ottenere anche le loro relazioni di dipendenza, qualcosa del genere:

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

L'obiettivo è rilevare le dipendenze di ogni pacchetto specifico:

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

E inseriscili nella mia corrente requirements.txt. Ad esempio, per questo input:

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

Vorrei ottenere:

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

C'è un modo per mostrare le dipendenze dei pacchetti pip installati?


So che hai posto questa domanda quattro anni fa e hai diligentemente contrassegnato la risposta che hai ottenuto rapidamente come la migliore risposta. Grazie per averlo fatto. Tuttavia, vorrei dare un'occhiata alla risposta che hai ricevuto da Anthon un anno dopo. pipdeptree è FANTASTICO !!! Apparentemente @naiquevin non è su SO da aprile 2015, ma qui ha creato uno strumento davvero carino.
Rob Fagen,

Risposte:


142

Dovresti dare un'occhiata a 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

Non genera un requirements.txtfile come indicato direttamente. Tuttavia il sorgente (255 righe di codice python) dovrebbe essere relativamente facile da modificare in base alle proprie esigenze, o in alternativa è possibile (come indicato da @MERose nel README pipdeptree 0.3) usarlo:

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

La versione 0.5 di pipdeptreeconsente anche l'output JSON con l' --jsonopzione, che è più facilmente analizzabile dalla macchina, a scapito di essere meno leggibile.


Secondo pypi.python.org/pypi/pipdeptree/0.3 , pipdeptree | grep -P '^\w+'stampa un requirements.txt.
MERose

@ MERose Grazie per averlo fatto notare. Devo aver ancora utilizzato la versione 0.2 quando l'ho scritto.
Anthon

Non funziona per bokeh:( Questo pacchetto ha un'organizzazione specifica dei requisiti, quindi pip non li mostra, ma conda sì.
Sklavit

12

Avviso: solo py2 /andonware

yolk può visualizzare le dipendenze per i pacchetti, a condizione che

  • sono stati installati tramite setuptools
  • fornito con metadati che includono informazioni sulle dipendenze

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

Grazie. Questa non è una soluzione completa, ma comunque utile.
tbicr

Non sono sicuro che possa esserci una soluzione completa - il problema è che le informazioni sulle dipendenze non sempre esistono (ad esempio per i pacchetti installati tramite distutils, che non supportano i metadati dei pacchetti)
ali_m

5
tuorlo non ha il supporto py3k al momento della scrittura.
yegle
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.