Чи є спосіб показати дерева залежностей для піп-пакетів?


91

У мене є проект із кількома залежностями пакета, основні вимоги вказані в 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

Чи є спосіб показати залежності встановлених піп-пакетів?


Я знаю, що ви задали це питання чотири роки тому і старанно позначили відповідь, яку швидко отримали, як найкращу відповідь. Дякую, що зробили це. Однак я б подивився на відповідь, яку ви отримали від Антона через рік. pipdeptree ПРИГУДНО !!! Очевидно @naiquevin не був у SO з квітня 2015 року, але він створив тут справді приємний інструмент.
Роб Фаген

Відповіді:


137

Вам слід поглянути на 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, коли писав це.
Антон

Він не працює для bokeh:( Цей пакет має конкретну організацію вимог, тому pip їх не показує, але conda.
Sklavit

12

Попередження: лише py2 / abandonware

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

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

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

Дякую. Це не повне рішення, але тим не менш корисна утиліта.
tbicr

Я не впевнений, чи може бути повне рішення - проблема в тому, що інформація про залежності існує не завжди (наприклад, для пакетів, встановлених через distutils, які не підтримують метадані пакета)
ali_m

5
На момент написання статті жовток не підтримує py3k.
yegle
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.