有啥方法可以显示 pip 包的依赖树吗?

Posted

技术标签:

【中文标题】有啥方法可以显示 pip 包的依赖树吗?【英文标题】:Is there any way to show the dependency trees for pip packages?有什么方法可以显示 pip 包的依赖树吗? 【发布时间】:2013-06-16 04:02:23 【问题描述】:

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

【问题讨论】:

我知道你在四年前问过这个问题,并努力将你很快得到的答案标记为最佳答案。谢谢你这样做。但是,一年后我会看看你从 Anthon 那里得到的答案。 pipdeptree 太棒了!!!显然@naiquevin 自 2015 年 4 月以来就没有参加过 SO,但他在这里创建了一个非常好的工具。 【参考方案1】:

你应该看看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

pipdeptree 的 0.5 版本还允许带有 --json 选项的 JSON 输出,这更容易机器解析,但可读性较差。

【讨论】:

根据pypi.python.org/pypi/pipdeptree/0.3,pipdeptree | grep -P '^\w+'打印一个requirements.txt。 @MERose 感谢您指出这一点。我写这篇文章时一定还在使用 0.2 版。 它不适用于bokeh :( 这个包有特定的要求组织,所以 pip 没有显示它们,但 conda 有。 现在可以直接使用 --freeze 标志直接生成 requirements.txt【参考方案2】:

警告:仅限 py2 / 废弃软件

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

通过setuptools安装

带有包含依赖信息的元数据

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

【讨论】:

谢谢。这不是完整的解决方案,但有用的实用程序。 我不确定是否有完整的解决方案 - 问题是依赖信息并不总是存在(例如对于通过 distutils 安装的包,它不支持包元数据) yolk 在撰写本文时不支持 py3k。 有人已经做了端口:pypi.org/project/yolk3k【参考方案3】:

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

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

使用 pip 安装 pipdeptree

pip install pipdeptree
pipdeptree -fl

这个包会列出你项目的所有依赖。

了解更多pipdeptree

【讨论】:

以上是关于有啥方法可以显示 pip 包的依赖树吗?的主要内容,如果未能解决你的问题,请参考以下文章

用pip安装python第三方包的时候显示错误

python安装依赖包方法

如何在不安装的情况下列出python库的依赖项? [复制]

PIP自动生成REQUIREMENTS.TXT依赖关系清单

通过 pip (PyPI) 安装 Python 实时依赖项 [重复]

python 项目中的 requirements.txt