【发布时间】:2020-02-05 21:33:04
【问题描述】:
假设我想安装包a,它需要包b1 和b2。反过来,b1 需要 c > 1.0.0 和 b2 需要 c < 1.0.0。所以b1和b2的要求不能用同一个包同时满足。
原则上/其他编程语言,这不是问题。可以并排安装两个版本的c,并确保b1 使用的版本不是b2。
但是,我不确定 pip 是否可以安装同一软件包的两个版本。我的第一个问题是: pip 可以安装一个包的两个版本吗?
我的主要问题是如何实际处理这个问题。我现在能想到的唯一方法就是
- fork
b1(或b2)和适用于 fork 的c版本,并将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 目录让我有点困惑)。
This blog post 表明目前对于冲突的传递依赖没有好的解决方案。其他项目(例如诗歌)对此有帮助吗?
【问题讨论】:
-
这是在 windows 环境、linux 还是完全其他的环境上?
-
我主要是问Linux,但如果有差异我也很好奇。
标签: python pip dependency-management python-poetry