0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

pipdeptree:清理依赖的大型项目工具

科技绿洲 来源:Python实用宝典 作者:Python实用宝典 2023-10-31 11:14 次阅读

你可能时常会遇到由于包的版本不匹配导致代码报错的问题,由于 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,安装GraphViz的教程可见这篇文章:Python 一键转化代码为流程图。安装完成后输入以下命令:

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 试一下。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 模块
    +关注

    关注

    7

    文章

    2622

    浏览量

    47173
  • 代码
    +关注

    关注

    30

    文章

    4682

    浏览量

    68016
  • 虚拟环境
    +关注

    关注

    0

    文章

    27

    浏览量

    8917
  • python
    +关注

    关注

    54

    文章

    4754

    浏览量

    84212
收藏 人收藏

    评论

    相关推荐

    Python项目依赖管理

    之前一直比较抵触用 Python ,很大一部分原因是觉得 Python 项目的环境管理比较混乱。Node.js 有 Npm 包管理工具,通过 package.json 配置项目依赖,最
    发表于 08-29 10:46 981次阅读

    Linux操作系统是同样需要清理工具

      大家可能都听说过Windows清理工具,无论是清理磁盘工具还是清理各种注册表信息工具,其都能够帮助我们恢复电脑的运行速度。但是对于Lin
    发表于 01-18 14:03

    大型项目外包合作

    本公司因业务需要 需要开发一套安卓的家庭安防系统信号终端 如有兴趣者可以合作 公司和个人都可以合作 重庆地区的优先考虑合作 我QQ604573783
    发表于 05-21 16:54

    想学labview异步多线程,大型项目规范,各类通讯的找我

    想学labview异步多线程,大型项目规范,各类通讯的找我,qq***
    发表于 02-27 21:19

    用labview写大型项目时,应该用什么架构写能利于调试和维护?

    用labview写大型项目时,应该用什么架构写能利于调试和维护,麻烦各位给些建议,非常感谢
    发表于 03-05 16:52

    面向大型项目组织的Web工作流集成框架

    大型工程项目管理组织通常是由多个企业动态组成的企业联合体,每个企业是在管理、技术、资源等方面有着自己鲜明行业特点的高度自治实体。本文采用有限状态机作为工作流
    发表于 08-31 10:36 6次下载

    Windows冗余清理工具

    电子发烧友网站提供《Windows冗余清理工具.exe》资料免费下载
    发表于 06-03 14:21 1次下载

    管理与开发LabVIEW大型项目

    LabVIEW教学课件与源代码,学习LabVIEW的很必要资料。
    发表于 12-14 17:44 83次下载

    如何在代码编写器Studio中处理大型项目详细概述

    此应用报告检查围绕大型、多站点项目的问题。在代码编写器Studio中的开发,并提供了如何使用扩展的技术代码编写器工作室的特点,以解决这些问题。讨论的一些特征使用源代码控制和外部MaFag文件,以及可执行文件的符号调试内置,使用大量的项目
    发表于 04-25 09:20 2次下载
    如何在代码编写器Studio中处理<b class='flag-5'>大型项目</b>详细概述

    区块链在发展中国家设施大型项目中的意义

    区块链技术能够组织大量与一系列交易相关的细节,这对于管理整个发展中国家的基础设施大型项目来说,可能是理想的选择,就像我国的“一带一路”计划(Belt and Road Initiative)所涉及的那些项目一样。
    发表于 08-10 14:28 1267次阅读

    c盘清理工具

    本视频主要详细介绍了c盘清理工具,分别有百度卫士、360安全卫士、QQ电脑管家、金山卫士、清除上网痕迹(深度上网痕迹清理器)。
    的头像 发表于 03-06 17:15 2461次阅读

    大型项目中使用Cscope

    何其他大型项目但基本步骤都是相同的,这其中包括C + +或者Java项目. 下载源码.首先得到的源代码.你可以从http://www.kernel.org下载Linux内核源代码.在后面
    发表于 04-02 14:36 339次阅读

    Google删除Chrome清理工具

    在 2015 年,Google 为了防止恶意软件篡改 Chrome 浏览器,影响用户正常上网、修改搜索结果、重定向到其他页面,或者在用户访问的页面中注入额外的广告(非网站自身的广告),推出了一个清理工具
    的头像 发表于 03-15 16:53 523次阅读

    大型Python项目依赖树如何一键理清

    你可能时常会遇到由于包的版本不匹配导致代码报错的问题,由于 pip freeze 将所有依赖项显示为二维列表,这时候如果想找到这个错误版本的包是比较麻烦的事情。这时候,有个工具你必须得知道,它就
    的头像 发表于 10-21 11:45 427次阅读
    <b class='flag-5'>大型</b>Python<b class='flag-5'>项目</b><b class='flag-5'>依赖</b>树如何一键理清

    Kondo-为开发者设计的磁盘清理工具

    kondo 是一款为开发者设计的磁盘清理工具,支持清理 16 种语言和工具链中的构建相关产物。
    的头像 发表于 12-09 17:26 528次阅读
    Kondo-为开发者设计的磁盘<b class='flag-5'>清理工具</b>