129

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

4

3 回答 3

193

你应该看看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,即更容易机器解析,但以降低可读性为代价。

于 2014-07-23T06:10:38.377 回答
13

警告:仅限 py2 / 放弃软件

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

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

    $ yolk -d Theano
    Theano 0.6.0rc3
      scipy>=0.7.2
      numpy>=1.5.0
    
于 2013-06-20T00:52:26.617 回答
3

你可以通过安装pipdeptree包来做到这一点。

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

pipdeptree使用 pip安装包

pip install pipdeptree
pipdeptree -fl

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

更多pipdeptree

在此处输入图像描述

于 2021-08-04T15:57:51.980 回答