必须手动覆盖 .condarc 文件禁用 defaults,因 conda config --add 仅叠加源而无法移除默认海外通道,残留 defaults 会导致依赖解析时混用镜像与官方源,引发 unsatisfiableerror 或安装卡死;正确配置需显式列出中科大各频道 url 并确保无 - defaults 行。

conda 配置中科大源不是“加几个链接就行”,关键在于避免混用 defaults 与第三方频道,否则会触发依赖冲突、包安装失败或环境损坏。直接改 .condarc 是最稳妥的方式。
为什么不能只用 conda config --add 加链接?
执行 conda config --add channels https://mirrors.ustc.edu.cn/anaconda/pkgs/main/ 看似简单,但实际会在原有 defaults 基础上叠加新源——而 defaults 指向海外服务器,它仍保留在 channel 列表里,且优先级可能高于你新加的镜像地址。
结果就是:conda 在解析依赖时,一半包从中科大下,另一半从 defaults(即国外)拉,一旦版本不一致,conda install 就卡住或报 UnsatisfiableError。
.condarc 必须写成“no defaults”模式
手动创建或覆盖 .condarc 文件,内容必须显式禁用 defaults,并按优先级顺序列出镜像地址:
channels: - https://mirrors.ustc.edu.cn/anaconda/pkgs/main/ - https://mirrors.ustc.edu.cn/anaconda/pkgs/r/ - https://mirrors.ustc.edu.cn/anaconda/pkgs/msys2/ - https://mirrors.ustc.edu.cn/anaconda/cloud/conda-forge/ - https://mirrors.ustc.edu.cn/anaconda/cloud/bioconda/ show_channel_urls: true
- Windows 路径:
%USERPROFILE%\.condarc(若文件不存在,先运行conda config --set show_channel_urls yes生成) - Linux/macOS 路径:
$HOME/.condarc - 不要保留任何
- defaults行,哪怕只有一行也不行 - 顺序很重要:越靠前的 channel 优先级越高,
main必须在最顶
验证配置是否真正生效
别只看 conda info 输出里有没有 mirrors.ustc.edu.cn ——那只是说明链接被读进去了。真正要看的是包下载行为:
- 运行
conda search numpy --info,检查返回的 URL 是否全为中科大域名 - 新建测试环境:
conda create -n testenv python=3.11 numpy -c conda-forge,观察下载链接是否走mirrors.ustc.edu.cn/anaconda/cloud/conda-forge - 如果出现
Fetching package metadata ...卡住超过 10 秒,大概率是某条 channel 还没切干净,回查.condarc是否残留defaults或拼写错误
Miniforge 用户注意 mirrored_channels 优化
如果你用的是 Miniforge(推荐搭配 mamba),.condarc 可简化为:
channels: - conda-forge mirrored_channels: conda-forge: https://mirrors.ustc.edu.cn/anaconda/cloud/conda-forge
这种写法让 mamba 自动把所有 conda-forge 请求重定向到中科大镜像,无需手动拼完整 URL;但前提是确保没其他 channel 干扰,尤其要删掉系统级 defaults 配置。
真正的坑不在“怎么写”,而在“删不干净”。很多人反复配置后仍失败,问题就出在旧的 .condarc 里还藏着一行 - defaults,或者 conda config --remove-key channels 没清掉全局配置。动手前,先运行 conda config --show-sources 看清楚所有配置来源。











