我正在使用
pipenv
处理 Python 包依赖项。
Python 包使用两个包(名为
pckg1
和
pckg2
),它们依赖于名为
pckg3
的同一个包,
但来自两个不同的包版本
显示依赖关系树:
$ pipenv graph
pckg1==3.0.0
- pckg3 [required: >=4.1.0]
pckg2==1.0.2
- pckg3 [required: ==4.0.11]
尝试安装依赖关系:
$ pipenv install
Warning: Your dependencies could not be resolved. You likely have a mismatch in your sub-dependencies.
You can use $ pipenv install --skip-lock to bypass this mechanism, then run $ pipenv graph to inspect the situation.
Hint: try $ pipenv lock --pre if it is a pre-release dependency.
Could not find a version that matches pckg3==4.0.11,==4.1.0,>=4.1.0 (from -r C:\Users\user\AppData\Local\Temp\pipenv-o7uxm080-requirements\pipenv-hwekv7dc-constraints.txt (line 2))
Tried: 3.3.1, 3.3.2, 3.3.3, 3.4.0, 3.4.2, 4.0.0, 4.0.0, 4.0.1, 4.0.1, 4.0.2, 4.0.2, 4.0.3, 4.0.3, 4.0.4, 4.0.4, 4.0.6, 4.0.6, 4.0.8, 4.0.8, 4.0.9, 4.0.9, 4.0.10, 4.0.10, 4.0.11, 4.0.11, 4.1.0, 4.1.0, 4.1.1, 4.1.1, 4.1.2, 4.1.2, 4.2.1, 4.2.1, 4.3.0, 4.3.0
There are incompatible versions in the resolved dependencies.
按照建议,
pipenv install --skip-lock
可以解决问题,但依赖关系树仍未解决。
我很乐意告诉
Pipenv
覆盖|| |的要求,并指定
pckg2
pckg3>=4.1.0
如何解决这个问题?
How can this be resolved?
遇到的问题是
pckg1
和
pckg2
对
pckg3
有冲突的版本要求。
pckg1
要求
pckg3
版本大于等于 4.1.0,而
pckg2
要求的版本是 4.0.11。 这就导致了依赖冲突,pipenv 无法找到满足所有要求的版本。
以下是几种解决此问题的方法:
1. 更新
pckg2
的依赖:
-
这是最理想的解决方案。 如果可能的话,请检查
pckg2
是否有更新版本,该版本依赖于pckg3>=4.1.0
。 可以查看pckg2
的文档或代码仓库来查找相关信息。
2. 使用
pipenv
的依赖覆盖功能:
-
如果无法更新
pckg2
,可以使用pipenv
的--pre
或--dev
选项来强制安装pckg3
的更高版本。例如:bash pipenv install "pckg3>=4.1.0" --pre
-
这将尝试安装
pckg3
的预发布版本,该版本可能满足pckg1
的要求。 - 请注意,使用预发布版本可能会带来未知风险,因为它们可能不稳定。
3. 手动编辑
Pipfile
:
-
可以直接编辑
Pipfile
文件,手动指定pckg3
的版本。 将pckg2
的依赖从pckg3==4.0.11
修改为pckg3>=4.1.0
。 然后运行pipenv install
重新安装依赖。[packages] pckg1 = "*" pckg2 = "*" pckg3 = ">=4.1.0"
-
这种方法需要手动管理依赖关系,并且可能会在将来导致问题,因此请谨慎使用。
4. 使用虚拟环境隔离项目:
-
如果无法解决依赖冲突,可以为每个项目创建单独的虚拟环境,并在每个环境中安装不同的
pckg3
版本。 这将确保每个项目都使用其所需的依赖版本,而不会发生冲突。
总结:
解决依赖冲突的最佳方法是更新依赖项或使用
pipenv
的依赖覆盖功能。 手动编辑
Pipfile
或使用虚拟环境隔离项目是最后的手段,应该谨慎使用。