根本原因是conda默认连接美国服务器repo.anaconda.com,跨太平洋链路导致元数据请求延迟高;需配置清华镜像并设置channel_priority: strict强制优先级。

conda create 卡在 “Solving environment” 或下载包极慢,根本原因不是你的网络差,而是它默认连的是美国服务器 repo.anaconda.com —— 跨太平洋链路让每次元数据请求都像拨号上网,解析依赖和下载二进制包自然拖成小时级。
为什么 conda create 会卡住不动?
Conda 创建环境时要做的远不止“复制 Python 解释器”:它得先拉取 channel 的 repodata.json(包含所有包的版本、依赖、平台标签),再用 SAT 求解器穷举满足条件的组合。这个过程对网络延迟极其敏感。
- 默认只走
defaultschannel,地址是https://repo.anaconda.com/pkgs/main,国内直连常超时或返回空响应 - 哪怕你指定了
python=3.11,Conda 仍会尝试从所有已配置 channel 并行拉取元数据;若其中某个源响应慢或失败,整个求解就挂起 -
pkgs/free已被官方弃用,但旧版 Conda 仍会默认尝试访问,清华镜像虽保留同步,但不推荐主动加——除非你真在维护 2017 年的老项目
永久换源:改 .condarc 是最稳的方案
别信“执行几条命令就完事”的说法——conda config --add channels 只追加、不清理,容易导致多源混杂、channel 优先级错乱,反而让 solving 更慢。
- 先删掉所有旧配置:
conda config --remove-key channels && conda config --remove-key default_channels - Windows 用户用记事本新建
%USERPROFILE%\.condarc,macOS/Linux 编辑~/.condarc - 粘贴以下内容(注意 YAML 缩进必须是空格,不能用 Tab):
channels: - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/ - https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/ show_channel_urls: true channel_priority: strict
关键点:channel_priority: strict 强制 Conda 只从列表顺序靠前的 channel 找包,避免跨源比对;show_channel_urls: true 让后续报错时能看清具体从哪个 URL 失败。
验证是否生效 & 救急技巧
运行 conda config --show channels,输出里应只有清华地址,且没有 - defaults;再跑 conda info --channels,确认 URL 域名是 tuna.tsinghua.edu.cn。
- 如果只是临时救急(比如在客户服务器上没权限改配置),直接在创建命令里加
-c: conda create -n myenv python=3.11 -c https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/ -c https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/- 换源后首次运行
conda create仍可能稍慢——那是 Conda 在本地重建索引缓存,之后就快了;可手动清一次:conda clean -i
channel_priority: strict 这一行最容易被跳过,但它决定了 Conda 是“聪明地找包”还是“盲目试遍所有源”。没加这句,哪怕你写了十个清华地址,它照样会偷偷去连 repo.anaconda.com。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











