假设我们在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 安装软件包时,它会自动安装任何依赖的 Python 软件包,而不检查这些软件包是否与以前安装的软件包冲突。它将安装包及其任何依赖项,而不考虑现有安装的状态。因此,具有例如Google Tensorflow工作安装的用户可能会发现,在使用pip安装不同的软件包时,它停止工作,该软件包需要与Tensorflow使用的版本不同的依赖NumPy库版本。在某些情况下,包可能看起来有效,但在细节上会产生不同的结果。
Anaconda (Python distribution( - 维基百科
在这个话题上,事情很快就会发生变化。由于pip的开发人员目前正在开发一个新的依赖解析器:
- https://pyfound.blogspot.com/2020/03/new-pip-resolver-to-roll-out-this-year.html
要立即对其进行测试,您可能需要安装pip 20.2b1并启用不稳定功能">解析器",例如以下任一功能:
PIP_UNSTABLE_FEATURE=resolver python -m pip install SomeProject
python -m pip --unstable-feature=resolver install SomeProject
有关更多详细信息,请参阅以下链接:
- https://discuss.python.org/t/announcement-pip-20-2b1-release/4242
其他参考资料:
- http://www.ei8fdb.org/thoughts/2020/05/test-pips-alpha-resolver-and-help-us-document-dependency-conflicts/
- https://pradyunsg.me/blog/2020/03/27/pip-resolver-testing/
- https://www.pythonpodcast.com/pip-resolver-dependency-management-episode-264/
更新 点 20.2
- https://pythoninsider.blogspot.com/2020/07/upgrade-pip-20-2-changes-20-3.html