【问题标题】:How does PIP determine the version of a dependency of multiple dependentsPIP如何确定多个依赖的依赖版本
【发布时间】:2020-10-21 22:07:57
【问题描述】:

假设我们在 Python 中有以下依赖树,使用 PIP 作为包安装程序:

A==1.2.1:
|  - B==1.5.4
|  - C==?.?.?

D==1.3.0:
|  - C==?.?.?

我们还假设包C的现有版本如下:

- 0.0.8
- 1.0.2

我们知道,PIP 不会将同一软件包的不同版本安装到环境中。这意味着它必须为所有家属选择一个合适的版本。

我根本无法理解 PIP 如何确定合适的版本。

如果包A 依赖于C==0.0.8 并且包D 依赖于C==1.0.2,这种情况不容易处理,不像NPM 等其他包管理器可以做到。

【问题讨论】:

  • 这种情况下pip 应该报错,因为它不能同时满足两个依赖。您是否通过一些示例项目对此进行了检查?
  • 我想知道npm 如何解决相互矛盾的依赖关系?我认为这根本不可能。或者npm 安装了多个版本的依赖项以供不同的消费者使用?

标签: python pip package dependency-management package-managers


【解决方案1】:

当 pip 安装一个包时,它会自动安装任何依赖的 Python 包,而不检查这些包是否与以前安装的包冲突。无论现有安装的状态如何,它将安装一个包及其任何依赖项。因此,安装了 Google Tensorflow 等工作的用户可能会发现它停止工作,因为它使用 pip 安装了一个不同的包,该包需要与 Tensorflow 使用的依赖库不同版本的依赖 NumPy 库。在某些情况下,该软件包可能看起来有效,但在细节上会产生不同的结果。

Anaconda (Python distribution) - Wikipedia

【讨论】:

    【解决方案2】:

    在这个话题上,事情会很快发生变化。由于 pip 的开发人员目前正在开发一个新的依赖解析器


    今天要对其进行测试,您可能需要安装 pip 20.2b1 并启用 unstable 功能 "resolver",例如以下之一:

    • PIP_UNSTABLE_FEATURE=resolver python -m pip install SomeProject
    • python -m pip --unstable-feature=resolver install SomeProject

    查看以下链接了解更多详情:


    其他参考资料:


    更新 pip 20.2

    【讨论】:

      猜你喜欢
      • 2019-12-25
      • 1970-01-01
      • 2016-09-18
      • 1970-01-01
      • 1970-01-01
      • 2020-08-22
      • 2020-06-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多