pip 没有正确解析 child/grandchild 依赖项
pip not properly resolving child/grandchild dependencies
我有一个像这样工作的模块依赖树(→ 表示依赖):
a → b, c
b → ruamel.yaml >= 0.16.5
c → ruamel.yaml < 0.16.6, >=0.12.4
我很清楚 ruamel.yaml 0.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
可以在 b
之前列出 c
)
- 使用额外的
requirements.txt
or constraints.txt
文件
- 根据实际需要,替代工具可能会有所帮助(我相信 poetry, pipenv,而且很可能其他人也可能有更好的 依赖解析器 ,但它们是不是 pip)
的一对一替代品
今天似乎已经可以测试 pip 的未来依赖解析器:
- Install pip from source
- 运行
path/to/python -m pip install --unstable-feature=resolver ...
在某种程度上,似乎也可以通过 pip check
命令在当前版本或 pip 中测试此依赖项解析器。
关于该主题的更多参考资料:
我有一个像这样工作的模块依赖树(→ 表示依赖):
a → b, c
b → ruamel.yaml >= 0.16.5
c → ruamel.yaml < 0.16.6, >=0.12.4
我很清楚 ruamel.yaml 0.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
可以在b
之前列出c
) - 使用额外的
requirements.txt
orconstraints.txt
文件 - 根据实际需要,替代工具可能会有所帮助(我相信 poetry, pipenv,而且很可能其他人也可能有更好的 依赖解析器 ,但它们是不是 pip) 的一对一替代品
今天似乎已经可以测试 pip 的未来依赖解析器:
- Install pip from source
- 运行
path/to/python -m pip install --unstable-feature=resolver ...
在某种程度上,似乎也可以通过 pip check
命令在当前版本或 pip 中测试此依赖项解析器。
关于该主题的更多参考资料: