conda create卡在“solving environment”本质是依赖解析失败或通道响应慢导致的假性卡死,因需拉取所有channel的repodata.json构建依赖图并求解兼容版本,过程无进度提示、易被误判为超时。

创建环境卡在 “Solving environment” 阶段,本质不是超时,而是依赖解析失败或通道响应慢导致的假性卡死。
为什么 conda create 会卡住不动
conda 在执行 create 时,第一步不是下载包,而是从所有配置的 channels 拉取 repodata.json(包元数据),然后构建整个依赖图并求解兼容版本组合。这个阶段不显示进度条、不打印日志(除非加 -v),看起来就是“超时”,实际可能是:
- 某个 channel 响应极慢(比如默认的
https://repo.anaconda.com/pkgs/main对国内用户常延迟 >30s) - 多个 channel 之间存在同名包但版本冲突,conda 反复回溯尝试,耗时指数级增长
- 本地缓存损坏,导致元数据解析异常,陷入无限重试
- 请求了过于宽泛的包组合(如不指定版本直接
conda create -n env numpy pandas scikit-learn),求解空间爆炸
快速跳过 Solving environment 卡顿的实操方法
不用等、不硬扛,直接干预求解过程:
- 加
--strict-channel-priority:强制只从高优先级 channel 取包,避免跨源混搭引发冲突。例如:conda create -n myenv python=3.8 numpy=1.21 --strict-channel-priority - 换更轻量的 base channel:用
conda-forge替代defaults,它同步快、包更新及时、元数据体积小。先运行:conda config --add channels conda-forge,再conda config --set channel_priority strict - 禁用非必要 channel:临时清空除必需之外的所有源:
conda config --remove-key channels && conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/ - 跳过元数据拉取(仅限已知包存在):用
--offline+ 已缓存包,或提前用conda install --download-only预加载
真正有效的超时控制手段
conda 本身不提供 --timeout 参数,但可通过环境变量和命令组合实现可控中断:
- 设置连接与读取超时(单位秒):
CONDA_REMOTE_READ_TIMEOUT=10 CONDA_REMOTE_CONNECT_TIMEOUT=5 conda create -n test python=3.8 - 用
timeout命令(Linux/macOS)或 PowerShellStart-Process(Windows)包裹,例如 Linux:timeout 120 conda create -n env python=3.8 - 加
-v查看卡在哪一步:conda create -n env python=3.8 -v 2>&1 | grep "Fetching"能看到具体 hang 在哪个 URL
容易被忽略的底层陷阱
即使换了镜像、清了缓存、指定了版本,仍可能卡住——这时候要查两个隐蔽点:
-
.condarc里是否写了custom_channels但对应镜像站已下线?比如旧版配置中残留的http://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/(注意是http,2026 年起清华源已全站强制https) - 是否启用了
conda activate的 shell hook,而当前终端未初始化?某些情况下会导致 conda 内部 channel 解析逻辑异常,可临时用conda create --no-default-packages -n env python=3.8绕过初始化逻辑测试











