Есть ли способ показать деревья зависимостей для пакетов pip?

96

У меня есть проект с несколькими зависимостями пакетов, основные требования перечислены в requirements.txt. Когда я вызываю pip freezeего, он выводит установленные на данный момент пакеты в виде простого списка. Я бы предпочел также получить их отношения зависимости, примерно так:

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

Цель состоит в том, чтобы обнаружить зависимости каждого конкретного пакета:

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

И вставить их в мой ток requirements.txt. Например, для этого входа:

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

Я бы хотел получить:

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

Есть ли способ показать зависимости установленных пакетов pip?

tbicr
источник
Я знаю, что вы задали этот вопрос четыре года назад и усердно отметили быстро полученный ответ как лучший. Спасибо за это. Однако я хотел бы взглянуть на ответ, который вы получили от Антона год спустя. pipdeptree УДИВИТЕЛЬНЫЙ !!! Очевидно, @naiquevin не был на SO с апреля 2015 года, но он создал здесь действительно хороший инструмент.
Роб Фейген

Ответы:

142

Вам следует взглянуть на 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

Он не создает requirements.txtфайл, как вы указали напрямую. Однако исходный код (255 строк кода Python) должен быть относительно легко изменить в соответствии с вашими потребностями, или, в качестве альтернативы, вы можете (как указано в @MERose в файле pipdeptree 0.3 README) использовать:

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

Версия 0.5 pipdeptreeтакже позволяет выводить JSON с --jsonопцией, которая легче обрабатывается машиной, но менее читаема.

Антон
источник
Согласно pypi.python.org/pypi/pipdeptree/0.3 , pipdeptree | grep -P '^\w+'печатает файл requirements.txt.
MERose
@MERose Спасибо, что указали на это. Я, должно быть, все еще использовал версию 0.2, когда писал это.
Anthon
Он не работает для bokeh:( У этого пакета есть особая организация требований, поэтому pip не показывает их, а
conda
12

Предупреждение: только py2 / Abandonware

yolk может отображать зависимости для пакетов при условии, что они

  • были установлены через setuptools
  • поставляется с метаданными, которые включают информацию о зависимостях

    $ yolk -d Theano
    Theano 0.6.0rc3
      scipy>=0.7.2
      numpy>=1.5.0
    
ali_m
источник
Благодарю. Это не полное решение, но полезная утилита.
tbicr
Я не уверен, может ли быть полное решение - проблема в том, что информация о зависимостях не всегда существует (например, для пакетов, установленных через distutils, которые не поддерживают метаданные пакетов)
ali_m
5
yolk не имеет поддержки py3k на момент написания.
yegle