假设我想安装包 a
这需要软件包 b1
和 b2
.反过来,b1
需要 c > 1.0.0
和 b2
需要 c < 1.0.0
.所以要求b1
和 b2
不能与同一个包裹同时履行。
原则上/其他编程语言,这不是问题。一个可以安装两个版本的c
并排并确保 b1
使用除 b2
以外的其他版本.
但是,我不确定 pip 是否可以安装同一个包的两个版本。我的第一个问题是:pip 可以安装一个包的两个版本吗?
我的主要问题是如何实际处理该问题。我现在能想到的唯一方法就是
b1
(或 b2
)和 c
的版本适用于 fork ,并上传 b1_forked
和 c_for_b1_forked
到 PyPI,或 b1
的代码(或 b2
)直接在我的项目中 两者似乎都比必要的问题更多。
我试过的
>>> import natsort; print(natsort.__file___)
'/home/moose/.local/lib/python3.6/site-packages/natsort/__init__.py'
$ cd /home/moose/.local/lib/python3.6/site-packages
$ ls
[... a lot of *.dist-info directories, some .py files, some .so files, ]
[... some directories called like the packages I've installed]
所以我很确定这是 Python 查找已安装包的地方,并且只安装了一个版本(尽管
*-dist-info
目录让我有 pip 困惑)。This blog post表明目前没有很好的解决冲突的传递依赖关系的方法。其他项目(例如诗歌)对此有帮助吗?
最佳答案
In principle / other programming languages, this is not a problem. One could install two versions of
c
side by side and make sure thatb1
uses another version thanb2
.
那不是解决办法。如
c
迟早会管理共享资源(例如控制台)b1
和 b2
将通过不同的 c
踩踏对方的输入或输出s,你最终会得到不正确的输入和垃圾输出。你所描述的是一个普遍的问题,不限于Python或
pip
.唯一的办法就是改b1
和/或 b2
同意 c
的版本.要么降级b1
允许 c < 1.0
或升级 b2
允许 c > 1.0
.Can
pip
install two versions of one package?
不,问题不在
pip
但在 Python 中:它的导入系统不允许从同一包的不同版本导入。你可以看看 mitsuhiko/multiversion
(仅限 Python2)。
关于python - Python/pip 如何处理冲突的传递依赖项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60084441/