问题描述
当我运行pip wheel sentry-sdk
时,它将下载以下车轮文件:
-
certifi-2020.6.20-py2.py3-none-any.whl
-
sentry_sdk-0.18.0-py2.py3-none-any.whl
-
urllib3-1.25.10-py2.py3-none-any.whl
sentry_sdk-0.18.0-py2.py3-none-any.whl
是我实际上要使用的库,而其他库是此库正常工作所需要的传递依赖项。我了解该文件来自PyPI,但是我不了解的是pip wheel
是如何选择上述传递依赖项的版本。
更多上下文
我的根本问题是,urllib3
的已解决版本与已经添加到我正在处理的项目的pex文件中的另一个版本冲突(我正在使用Bazel生成pex)考虑降级urllib3
的版本以匹配我项目的现有版本。查看setup.py
from the sentry-sdk
in GitHub时,它说只要求它大于1.10.0
("urllib3>=1.10.0"
),所以我认为降级是可行的,但我想确保避免生产崩溃。>
谢谢
解决方法
pip的当前版本(2020-10-13)does not have a dependency resolver,它会贪婪地选择第一个约束(因此,如果首先无界遇到urllib3
,它将选择最新版本-即使更高版本的软件包有更严格的要求)
此功能已更改为点数,您可以enable the resolver as an opt-in in pip>=20.2,它将在将来(今年晚些时候)成为默认设置