pip轮是如何解析可传递依赖关系的



当我运行pip wheel sentry-sdk时,它会下载以下轮子文件:

  1. certifi-2020.6.20-py2.py3-none-any.whl
  2. sentry_sdk-0.18.0-py2.py3-none-any.whl
  3. 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版本,以匹配我的项目现有版本。看看GitHub中sentry-sdk中的setup.py,它说它只要求它大于1.10.0("urllib3>=1.10.0"(,所以我认为降级会起作用,但我想确保避免生产崩溃。

感谢

当前版本的pip(2020-10-13(没有依赖解析程序,它贪婪地选择第一个约束(因此,如果首先遇到无限制的urllib3,它将选择最新版本——即使以后的包有更严格的要求(

这是在pip中更改的,您可以在pip>20.2,它将在未来(今年晚些时候(成为默认