2013-06-19 13 views
31

Mam projekt z wieloma zależnościami pakietów, główne wymagania są wymienione w requirements.txt. Kiedy zadzwonię pod numer pip freeze, drukuje on aktualnie zainstalowane pakiety jako zwykłą listę. Wolałbym również uzyskać ich relacji zależności, coś takiego:Czy istnieje sposób wyświetlania drzew zależności dla pakietów paczek?

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 

Celem jest wykrycie zależności pomiędzy poszczególnymi opakowaniu:

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

i wstawić je do mojego obecnego requirements.txt. Na przykład, dla tego wejścia:

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

chciałbym dostać:

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

Czy jest jakiś sposób pokazać zależności zainstalowanych pakietów pip?

+0

Wiem, że zadałeś to pytanie cztery lata temu i skrupulatnie zaznaczyłeś odpowiedź, którą szybko uzyskałeś jako najlepszą odpowiedź. Dzięki za zrobienie tego. Jednak przyjrzałbym się odpowiedzi, którą otrzymałeś od Anthon w rok później. pipdeptree jest NIESAMOWITE !!! Podobno @naiquevin nie był na SO od kwietnia 2015 roku, ale stworzył tutaj naprawdę fajne narzędzie. –

Odpowiedz

49

powinien spojrzeć pod adresem 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 

Nie generuje pliku requirements.txt, jak wskazano bezpośrednio. Jednak źródło (255 linii kodu Pythona) powinny być stosunkowo łatwo modyfikować do swoich potrzeb, lub alternatywnie można (jak @MERose wskazany jest w pipdeptree 0,3 README) z użytku:

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

wersja 0.5 pipdeptree pozwala również na wyjście JSON z opcją --json, która jest łatwiejsza do parsowania, kosztem mniej czytelności.

+0

Zgodnie z https://pypi.python.org/pypi/pipdeptree/0.3, 'pipdeptree | grep -P '^ \ w +' 'wyświetla plik requirements.txt. – MERose

+0

@MERose Dzięki za wskazanie tego. Kiedy to pisałem, wciąż musiałem używać wersji 0.2. – Anthon

+0

Nie działa dla 'bokeh' :(Ten pakiet ma specyficzną organizację wymagań, więc pip nie pokazuje ich, ale robi to conda. – Sklavit

12

yolk może wyświetlać zależności dla opakowań, pod warunkiem że

  • zostały zainstalowane poprzez setuptools
  • przyszedł z metadanych, który zawiera informacje o zależnościach

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

Dzięki. To nie jest pełne rozwiązanie, ale pomocne narzędzie. – tbicr

+0

Nie jestem pewien, czy istnieje pełne rozwiązanie - problem polega na tym, że informacje o zależnościach nie zawsze istnieją (na przykład w przypadku pakietów instalowanych za pośrednictwem 'distutils', które nie obsługuje metadanych pakietu) –

+1

żółtko nie ma py3k wsparcie od czasu pisania. – yegle

Powiązane problemy