pip依赖解析器未校验全量已安装包 多包版本依赖冲突如何解决
pip依赖冲突报错排查修复
原始报错内容
ERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts. daal4py 2021.5.0 requires daal==2021.4.0, which is not installed. mxnet 1.7.0.post2 requires numpy<1.17.0,>=1.8.2, but you have numpy 1.18.5 which is incompatible. d2l 0.17.5 requires numpy==1.21.5, but you have numpy 1.18.5 which is incompatible. d2l 0.17.5 requires requests==2.25.1, but you have requests 2.18.4 which is incompatible.
报错核心含义
当前使用的pip版本依赖解析逻辑不会在安装/更新包时全量校验所有已安装包的版本要求,长期零散装包后攒出了以下几类问题:
- 缺失依赖:daal4py 2021.5.0 强依赖的
daal==2021.4.0没有安装 - 版本不兼容:
- mxnet 1.7.0.post2要求numpy版本在
>=1.8.2,<1.17.0区间,当前环境numpy是1.18.5,超出要求上限 - d2l 0.17.5要求固定版本
numpy==1.21.5、requests==2.25.1,当前环境对应包版本为1.18.5、2.18.4,均不满足要求 - 其中mxnet和d2l对numpy的版本要求完全没有交集,不存在能同时满足两者要求的numpy版本,是核心冲突点
- mxnet 1.7.0.post2要求numpy版本在
修复步骤
- 优先从根源规避问题:全局Python环境混装不同项目依赖是这类冲突的核心诱因,不同项目使用独立虚拟环境隔离,装包时尽量把同项目需要的包和对应版本写在requirements.txt中一次性安装,让pip可以统一做依赖解析,避免零散装包攒出冲突。
- 按实际使用场景解决当前环境冲突:
- 场景1:主要使用d2l(动手学深度学习)相关代码
执行以下命令卸载冲突的低版本mxnet、依赖缺失的daal4py,安装d2l要求的对应版本包:
后续如果需要使用mxnet,安装适配高版本numpy的新版本即可,不要使用1.7.0.post2这个过旧版本。pip uninstall -y mxnet daal4py pip install numpy==1.21.5 requests==2.25.1 - 场景2:主要使用mxnet 1.7.0.post2的老项目
执行以下命令卸载不兼容的d2l、daal4py,将numpy降到mxnet要求的版本区间:pip uninstall -y d2l daal4py pip install "numpy>=1.8.2,<1.17.0"
- 场景1:主要使用d2l(动手学深度学习)相关代码
- 补装缺失依赖(如果确定需要保留daal4py):执行
pip install daal==2021.4.0即可,注意daal4py本身也有numpy版本要求,装完要确认和当前环境其他包不冲突。 - 校验修复结果:所有操作执行完后,跑
pip check命令,没有输出任何冲突提示就说明当前环境依赖正常。
注意:不要保留当前1.18.5版本的numpy凑合用,这个版本既不满足mxnet的要求也不满足d2l的要求,运行代码时会出现难以定位的API报错、计算结果异常等问题。
内容的提问来源于stack exchange,提问作者Fadepo joshua tobi
相关产品推荐
相关产品推荐

