您可能经常会遇到包版本不匹配导致代码错误的问题。由于pipfreeze将所有的依赖显示为一个二维列表,这时候如果要找到这个错误版本的包是一件比较麻烦的事情。这时候,有一个工具你一定要知道,它就是pipdeptree。pipdeptree是一个命令行工具,可以用来以依赖树可视化的形式显示已安装的python包。它适用于全局安装在您计算机上的单个模块,也适用于虚拟环境(如Virtualenv)中的模块。1、安装安装pipdeptree只需要在你的环境中输入以下命令:pipinstallpipdeptree测试过的Python版本:2.7、3.5、3.6、3.7、3.8、3.9.2。pipfreeze和pipdeptree的用法和例子最大的区别如下:@cdbe30c160e1c29802df75e145ea4ad903c05386#egg=Saookfe==Markupy0.22pipdeptree@file:///private/tmp/pipdeptree-2.0.0b1-py3-none-any.whlWerkzeug==0.11.2可见,pipfreeze只能显示依赖列表至多,而在pipdeptree中,每个模块的依赖关系都可以很直观的显示出来:$pipdeptreeWarning!!!发现可能存在冲突的依赖项:*Jinja2==2.11.2-MarkupSafe[要求:>=0.23,已安装:0.22]----------------------------------------------------------------------烧瓶==0.10.1-itsdangerous[要求:>=0.21,安装:0.24]-Jinja2[要求:>=2.4,安装:2.11.2]-MarkupSafe[要求:>=0.23,安装:0.22]-Werkzeug[要求:>=0.7,安装:0.11.2]Lookupy==0.1pipdeptree==2.0.0b1-pip[要求:>=6.0.0,installed:20.1.1]setuptools==47.1.1wheel==0.34.2请注意这个Warning,它提醒你哪些模块会导致它所依赖的模块版本之间发生冲突。这是一个非常有用的提醒。很多时候问题出在这里不仅如此,如果存在循环依赖,如:CircularDependencyA=>CircularDependencyB=>CircularDependencyA,则会提示如下:$pipdeptree--excludepip,pipdeptree,setuptools,wheelWarning!!!发现循环依赖:-CircularDependencyA=>CircularDependencyB=>CircularDependencyA-CircularDependencyB=>CircularDependencyA=>CircularDependencyB--------------------------------------------------------------------wsgiref==0.1.2argparse==1.2。1如果你想生成requirements.txt,你可以这样做:$pipdeptree-f|teelocked-requirements.txtFlask==0.10.1itsdangerous==0.24Jinja2==2.11.2MarkupSafe==0.23Werkzeug==0.11.2gnureadline==8.0.0-egit+git@github.com:naiquevin/lookupy。git@cdbe30c160e1c29802df75e145ea4ad903c05386#egg=Lookupypipdeptree@file:///private/tmp/pipdeptree-2.0.0b1-py3-none-any.whlpip==20.1.1setuptools1.1==whel==0.34.2确认后有没有冲突的依赖项,它甚至可以被“锁定”,所有包都将固定到它们当前安装的版本:$pipdeptree-f|sed's///g'|sort-u>locked-requirements.txt3.可视化依赖树为了可视化依赖树,我们需要安装GraphViz。安装完成后,输入以下命令:pipdeptree--graph-outputpng>dependencies.png#pipdeptree--graph-outputdot>dependencies.dot#pipdeptree--graph-outputpdf>dependencies.pdf#pipdeptree--graph-outputsvg>dependencies.svg支持四种格式的输出。这里png的输出效果如下:效果很好。如果你有一个大项目需要清理依赖,你可以尝试使用pipdeptree。以上就是本次分享的全部内容。觉得文章还不错的话,请关注公众号:Python编程学习圈,每日干货分享,发送“J”还能收到海量学习资料,涵盖Python电子书和教程,数据库编程、Django、爬虫、云计算等。或者去编程学习网了解更多编程技术知识。
