有啥方法可以显示 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 包的依赖树吗?的主要内容,如果未能解决你的问题,请参考以下文章