关于python:大型Python项目依赖树很烦教你一键理清

4次阅读

共计 2505 个字符,预计需要花费 7 分钟才能阅读完成。

你可能时常会遇到因为包的版本不匹配导致代码报错的问题,因为 pip freeze 将所有依赖项显示为二维列表,这时候如果想找到这个谬误版本的包是比拟麻烦的事件。这时候,有个工具你必须得晓得,它就是 pipdeptree.

pipdeptree 是一个命令行实用程序,它能用于以依赖关系树可视化的模式显示已装置的 python 包。

它实用于全局装置在计算机上的各个模块,也实用于 Virtualenv 等虚拟环境中的模块。

1. 装置

你只须要在你的环境中输出以下命令就能装置 pipdeptree:

pip install pipdeptree

已通过测试的 Python 版本:2.7,3.5,3.6,3.7,3.8,3.9.

2. 用法和示例

pip freeze 和 pipdeptree 最大的区别如下:

# pip freeze 的显示
$ pip freeze
Flask==0.10.1
itsdangerous==0.24
Jinja2==2.11.2
-e git+git@github.com:naiquevin/lookupy.git@cdbe30c160e1c29802df75e145ea4ad903c05386#egg=Lookupy
MarkupSafe==0.22
pipdeptree @ file:///private/tmp/pipdeptree-2.0.0b1-py3-none-any.whl
Werkzeug==0.11.2

可见,pip freeze 最多只能显示一个依赖的列表,而在 pipdeptree,每个模块的依赖关系可能十分直观地展现进去:

$ pipdeptree
Warning!!! Possibly conflicting dependencies found:
* Jinja2==2.11.2
 - MarkupSafe [required: >=0.23, installed: 0.22]
------------------------------------------------------------------------
Flask==0.10.1
  - itsdangerous [required: >=0.21, installed: 0.24]
  - Jinja2 [required: >=2.4, installed: 2.11.2]
    - MarkupSafe [required: >=0.23, installed: 0.22]
  - Werkzeug [required: >=0.7, installed: 0.11.2]
Lookupy==0.1
pipdeptree==2.0.0b1
  - pip [required: >=6.0.0, installed: 20.1.1]
setuptools==47.1.1
wheel==0.34.2

请留神这个 Warning,提醒了你哪些模块会造成其依赖的模块版本发生冲突,这是十分有用的提醒,很多时候问题就呈现在这里。

不仅如此,如果存在循环性依赖,比方:

CircularDependencyA => CircularDependencyB => CircularDependencyA

它会进行如下提醒:

$ pipdeptree --exclude pip,pipdeptree,setuptools,wheel
Warning!!! Cyclic dependencies found:
- CircularDependencyA => CircularDependencyB => CircularDependencyA
- CircularDependencyB => CircularDependencyA => CircularDependencyB
------------------------------------------------------------------------
wsgiref==0.1.2
argparse==1.2.1

如果你想生成 requirements.txt,能够这么做:

$ pipdeptree -f | tee locked-requirements.txt
Flask==0.10.1
  itsdangerous==0.24
  Jinja2==2.11.2
    MarkupSafe==0.23
  Werkzeug==0.11.2
gnureadline==8.0.0
-e git+git@github.com:naiquevin/lookupy.git@cdbe30c160e1c29802df75e145ea4ad903c05386#egg=Lookupy
pipdeptree @ file:///private/tmp/pipdeptree-2.0.0b1-py3-none-any.whl
  pip==20.1.1
setuptools==47.1.1
wheel==0.34.2

在确认没有抵触的依赖项后,甚至能够将其“锁定”,其中所有包都将固定到其以后装置的版本:

$ pipdeptree -f | sed 's/ //g' | sort -u > locked-requirements.txt

3. 可视化依赖树

为了可能可视化展现依赖树,咱们须要装置 GraphViz,。装置实现后输出以下命令:

pipdeptree --graph-output png > dependencies.png

# pipdeptree --graph-output dot > dependencies.dot
# pipdeptree --graph-output pdf > dependencies.pdf
# pipdeptree --graph-output svg > dependencies.svg

反对四种格局的输入,这里 png 的输入成果如下:

成果是十分不错的,大家如果有须要清理依赖的大型项目,能够用 pipdeptree 试一下。

以上就是本次分享的所有内容,如果你感觉文章还不错,欢送关注公众号:Python 编程学习圈 ,每日干货分享,发送“J”还可支付大量学习材料,内容笼罩 Python 电子书、教程、数据库编程、Django,爬虫,云计算等等。或是返回编程学习网,理解更多编程技术常识。

正文完
 0