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

问题描述 投票:0回答:6

我有一个具有多个包依赖项的项目,主要要求列在

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包的依赖关系?

python pip requirements.txt
6个回答
299
投票

你应该看看

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 输出,这更容易被机器解析,但代价是可读性较差。


11
投票

警告:仅限 py2 / 放弃软件

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

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

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

11
投票

您可以通过安装

pipdeptree
包来做到这一点。

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

使用 pip 安装

pipdeptree

pip install pipdeptree
pipdeptree -fl

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

了解更多pipdeptree


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/


0
投票

使用pip-compile命令冻结requirements.in文件

Pip-tools v6.14.0 似乎有 pip-compile 命令来默认生成带注释的

requirements.txt
文件。我看到您只是打算从 virtualenv 冻结已安装的软件包,但更好的方法是有一个
setup.py
requirements.in
文件,您可以在其中使用版本编写已安装的软件包。

输出将类似于以下内容:

# requirements.txt
# This file is autogenerated by pip-compile with Python 3.7
# by the following command:
#
#    pip-compile --no-emit-index-url --output-file requirements.txt setup.py
#
my-private-package==2.3.0
    # via my-repo (setup.py)
alembic==1.7.4
    # via my-private-package-dep
amqp==2.6.1
    # via kombu

您还可以使用

--no-annotate
arg 关闭依赖注释。


0
投票

如果您使用诗歌,您将在

poetry.lock
文件的
[package.dependencies]
部分中看到依赖关系树

例如:

[[package]]
name = "requests"
version = "2.31.0"
description = "Python HTTP for Humans."
optional = false
python-versions = ">=3.7"
files = [
    {file = "requests-2.31.0-py3-none-any.whl", hash = "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f"},
    {file = "requests-2.31.0.tar.gz", hash = "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1"},
]

[package.dependencies]
certifi = ">=2017.4.17"
charset-normalizer = ">=2,<4"
idna = ">=2.5,<4"
urllib3 = ">=1.21.1,<3"
© www.soinside.com 2019 - 2024. All rights reserved.