有没有办法显示pip包的依赖树?

时间:2013-06-19 14:44:51

标签: python pip requirements.txt

我有一个包含多个包依赖关系的项目,主要要求列在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包的依赖关系?

3 个答案:

答案 0 :(得分:87)

你应该看看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 --nowarn | grep -P '^[\w0-9\-=.]+' > requirements.txt

pipdeptree的0.5版本还允许使用--json选项的JSON输出,这更容易机器解析,但代价是可读性较低。

答案 1 :(得分:12)

yolk可以显示包的依赖关系,前提是它们

  • 是通过setuptools
  • 安装的
  • 附带包含依赖关系信息的元数据

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

答案 2 :(得分:1)

您可以通过安装 pipdeptree 包来实现。

在您的项目文件夹中打开命令提示符。如果您正在使用任何虚拟环境,请切换到该虚拟环境。

使用 pip 安装 pipdeptree

pip install pipdeptree
pipdeptree -fl

此包将列出您项目的所有依赖项。

了解更多pipdeptree

enter image description here