You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

创建Python环境时遇UnsatisfiableError依赖冲突问题求助

解决conda创建环境时的UnsatisfiableError(mkl与scipy/numpy依赖冲突)

我来帮你解决这个conda依赖冲突的问题,这个错误是典型的版本不兼容导致的,我们先理清冲突根源,再给出针对性的解决方案:

冲突原因分析

你执行conda env create -f cvcourse_windows.yml -n cv_python时触发的UnsatisfiableError,核心矛盾在于:

  • 你的yml文件中固定了mkl==2019.0=118
  • 但你指定的scipy==1.1.0=py36h4f6bf74_1依赖numpy>=1.15.1,而该numpy版本要求mkl>=2019.1,<2020.0a0
  • 这两个mkl版本范围没有交集,导致conda无法找到兼容的包组合

具体解决方案

下面是几种可行的解决方法,你可以按顺序尝试:

1. 放宽mkl的版本限制

直接修改yml文件中的mkl条目,把固定版本换成满足要求的范围,或者去掉版本号让conda自动匹配:

# 原条目
- mkl=2019.0=118
# 修改为(二选一)
- mkl>=2019.1,<2020.0a0
# 或者更灵活的方式
- mkl

修改后重新执行创建命令,conda会选择符合numpy依赖的mkl版本。

2. 减少不必要的固定版本

你的yml文件中很多包都固定了具体的build号(比如numpy=1.15.1=py36ha559c80_0),这会极大限制conda的依赖求解能力。建议对非必须固定的包,只保留版本号前缀或者直接去掉版本:

# 原条目
- numpy=1.15.1=py36ha559c80_0
- scipy=1.1.0=py36h4f6bf74_1
# 修改为
- numpy>=1.15.1
- scipy>=1.1.0

这样conda的求解器有更大空间找到所有包的兼容组合。

3. 添加conda-forge通道并调整优先级

conda-forge社区维护的包通常有更灵活的依赖配置,你可以在yml的channels列表最前面添加conda-forge

channels:
- conda-forge
- michael_wild
- defaults

然后重新执行创建命令,conda会优先从conda-forge获取包,更容易解决依赖冲突。

4. 使用严格通道优先级参数

执行创建命令时加上--strict-channel-priority,强制conda优先使用前面通道的包,避免不同通道的包版本混乱:

conda env create -f cvcourse_windows.yml -n cv_python --strict-channel-priority

5. 手动逐步创建环境

如果yml的依赖过于复杂,你可以先创建一个基础环境,再逐个安装关键包,让conda逐步处理依赖:

# 创建基础python3.6环境
conda create -n cv_python python=3.6
# 激活环境
conda activate cv_python
# 先安装冲突核心包,让conda解决它们的依赖
conda install scipy=1.1.0 numpy=1.15.1 mkl
# 再安装其他需要的包,比如keras、opencv等
conda install keras=2.2.2 opencv=3.4.2

补充说明

重装conda无法解决问题,因为冲突的根源是你指定的包版本组合本身不兼容,而不是conda工具的问题。放宽版本限制或者换用更灵活的包源,是解决这类依赖冲突的核心思路。

内容的提问来源于stack exchange,提问作者Nane

火山引擎 最新活动