我有一个模块的依赖关系树,其工作原理如下(→表示依赖关系):
a → b, c
b → ruamel.yaml >= 0.16.5
c → ruamel.yaml < 0.16.6, >=0.12.4
我很清楚 ruamel.yaml0.16.5
将正确解决这两个依赖关系。然而,当我pip install a
,我得到以下日志:
Collecting ruamel.yaml>=0.16.5
Downloading ruamel.yaml-0.16.10-py2.py3-none-any.whl (111 kB)
然后后来:
ERROR: <package c> 0.4.0 has requirement ruamel.yaml<0.16.6,>=0.12.4, but you'll have ruamel-yaml 0.16.10 which is incompatible.
因此,pip 在选择安装哪些包时完全忽略了孙子依赖项。但它意识到最后已经搞砸了。为什么 pip 没有在这里选择正确的包。有没有办法帮助它更好地发挥作用?
我相信这是一个众所周知的问题,目前正在解决中。一周前的留言:http://pyfound.blogspot.com/2020/03/new-pip-resolver-to-roll-out-this-year.html
与此同时,可以采取一些措施来尝试缓解此类问题:
- 恢复依赖项的顺序(在您的示例中
a
可以列出c
before b
)
- 使用额外的requirements.txt or constraints.txt file
- 根据实际需要,替代工具可以提供帮助(我相信poetry, pipenv,并且很可能其他人也可能有更好的依赖解析器,但它们并不是一对一的替代pip)
看来已经可以测试了pip今天的未来依赖解析器:
- Install pip从源头
- Run
path/to/python -m pip install --unstable-feature=resolver ...
在某种程度上,似乎也可以在当前版本或中测试此依赖项解析器pip通过pip check
命令。
关于该主题的更多参考:
- https://pradyunsg.me/blog/2020/03/27/pip-resolver-testing/
- https://discuss.python.org/t/an-update-on-pip-and-dependency-resolution/1898/2
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)