相信大家在按照一些包的时候经常会碰到版本不兼容,但是又不知道版本之间的依赖关系,今天给大家介绍一个工具:pipdeptree
pipdeptree 是一个 Python 包,用于查看已安装的 pip 包及其依赖关系。它以树形结构展示包之间的依赖关系,帮助开发者理解和管理项目的依赖。
1、安装:
使用 pip install pipdeptree 命令来安装。
2、查看所有依赖:
使用 pipdeptree 命令可以查看所有已安装包及其依赖关系。
3、查看特定包的依赖:
使用 pipdeptree -p <package_name> 命令可以查看特定包的依赖关系。
4、查看哪些包依赖于特定包:
使用 pipdeptree -r -p <package_name> 命令可以查看哪些包依赖于特定包。
5、生成需求文件:
使用 pipdeptree --freeze 命令可以生成类似 pip freeze 的输出,但包括依赖关系信息。
上图可以看到当我在安装onnx==1…13.0的时候,出现不兼容问题,注意是tensorboard和protobuf版本不兼容的问题,当我使用pipdeptree -p onnx的时候,会显示与之兼容的tensorboard和protobuf版本。可以看到不管是对于tensorboard还是onnx来说,protubuf都是太高,这个时候我们降低protobuf的版本。
当我们安装protobuf的版本的时候,可以发现,与onnx兼容的protobuf的范围:protobuf [required: >=3.20.2,<4, installed: 3.20.3],所以仅仅降低protobuf的范围是不够的,这个时候,我们降低onnx的版本,
当我们把onnx降低到1.12.0的时候,再去安装protobuf的时候,不会出现兼容报错了。这个时候在pipdeptree -p onnx,可以看到,protobuf在兼容范围里面。可以看到出现了一个警告:
* twisted==23.10.0
- zope-interface [required: >=5, installed: ?]
我们可以继续按照上面的过程,先看看一个twisted的兼容版本,其实这个zope.interface,是已经安装了的,但是不知道为什么twisted识别不出来,我尝试了重新与twisted兼容的zope.interface,但是还是不行,还是识别不出来,
根据以往的经验,我感觉可能twisted版本太新了,我一查,果然是
于是我尝试降低twisted的版本,大家可能会有疑问了,twisted要降低到哪一个版本,我个人经验是,要与有关联包发布时间的版本,这个是我的个人经验,一直挺好使的,如果在出现兼容问题,安装发布时间相近的包,几乎很少出现兼容问题。,强烈推荐大家试试。比如twist一直是与zope.interface出现兼容问题,我们可以查看一下,zope.interface5.5.2的发布时间。
可以看到,与zope.interface5.5.2发布时间相近的twisted版本是22.10.0。所以就降低到这个版本。
可以看到再次pipdeptree -p twisted,没有出现任何不兼容的警告了。
当在出现包之间不兼容的时间,强烈大家安装发布时间相近的版本,发布时间不要相隔太久,我在实践过程中就是这样做的,几乎每次都完美的解决了。依赖包之间,发布时间相差越久,越容易出现不兼容的问题。比如上面的twisted和zope.interface,发布相差一年就出现兼容问题了。