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

tbi*_*icr 67 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
Run Code Online (Sandbox Code Playgroud)

目标是检测每个特定包的依赖关系:

Werkzeug==0.8.3
    Flask==0.9
    Flask-Admin==1.0.6
Run Code Online (Sandbox Code Playgroud)

并将这些插入我的当前requirements.txt.例如,对于此输入:

Flask==0.9
Flask-Admin==1.0.6
Werkzeug==0.8.3
Run Code Online (Sandbox Code Playgroud)

我想得到:

Flask==0.9
    Jinja2==2.7
Flask-Admin==1.0.6
Werkzeug==0.8.3
Run Code Online (Sandbox Code Playgroud)

有没有办法显示已安装的pip包的依赖关系?

Ant*_*hon 105

你应该看看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
Run Code Online (Sandbox Code Playgroud)

它不会生成requirements.txt您直接指示的文件.然而,源代码(255行python代码)应该相对容易修改以满足您的需要,或者您可以(如@MERose指示在pipdeptree 0.3 README中)使用:

pipdeptree --freeze  --warn silence | grep -P '^[\w0-9\-=.]+' > requirements.txt
Run Code Online (Sandbox Code Playgroud)

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


ali*_*i_m 12

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

  • 在撰写本文时,蛋黄没有py3k支持. (5认同)

Cod*_*ker 10

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

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

使用 pip安装pipdeptree

pip install pipdeptree
pipdeptree -fl
Run Code Online (Sandbox Code Playgroud)

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

了解更多pipdeptree

在此输入图像描述


rae*_*aek 5

我意识到这个问题已经过去很多年了,但它出现在我的搜索中,所以我想我应该分享一些知识。

pip-tools软件包包含一个名为 的工具pip-compile,它似乎也解决了原始发布者的问题。

pip-compile接受一个输入文件,可以是 setup.py、setup.cfg、pyproject.toml 或requirements.in。输入文件是您手写的文件,包含“直接”依赖项。它可能不会指定确切的依赖版本,但可能会使用版本范围(也可能根本没有限制)。该工具输出一个新的 rquirements.txt 文件,其中添加了所有间接依赖项,并将依赖项固定到确切的版本。

如果您pip-compile在更新源文件后再次运行该工具,它将根据需要在输出文件中添加或删除依赖项。您还可以选择通过添加标志来升级特定依赖项。

因此,虽然pip-compile没有向您显示依赖关系树本身,但它可以帮助您收集依赖关系树的所有叶子(我认为这就是原始发布者最终想要做的事情)。

在这里阅读更多内容: https: //github.com/jazzband/pip-tools/