尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

Anaconda 换源指南:conda 国内镜像源与 pip 配置、提速排查

发布时间:2026/9/30 1:09:50

资讯中心
01
ARTICLE

Anaconda 换源指南:conda 国内镜像源与 pip 配置、提速排查

Anaconda 换源指南:conda 国内镜像源与 pip 配置、提速排查
刚装完 Anaconda 的那几天最容易让人怀疑人生的时刻往往不是环境没配好而是敲下conda install之后光标停在Solving environment上转了几分钟最后甩给你一个CondaHTTPError。我带的每一批新人里都有人以为是自己的网断了反复重启路由器结果问题根本不在网络上——而是 conda 默认去取包的那几个地址物理距离离你太远。把 Anaconda 的国内镜像源配好是我让人上手的第一件事比学虚拟环境还靠前。这篇就把这件事彻底讲透conda 到底在下载什么、几家常用国内镜像源各有什么脾气、.condarc每一行该怎么写、pip 为什么也得跟着换、以及我这些年踩过的坑和报错对照表。不管你是刚下载完 Anaconda 的小白还是被某个包卡了半小时的老手照着走一遍都能省下大量等待时间。1. 换源之前先搞清楚 conda 到底在下载什么很多人对换源的理解停留在把下载地址换快一点这个理解不算错但太粗糙了。你只有知道 conda 在背后做了哪几件事才能在出问题的时候知道该查哪一层。1.1 channel 的本质一个装着索引的 HTTP 目录conda 里的 channel你可以把它理解成一个公开的文件夹里面放两类东西一类叫repodata.json是索引文件记录了这个仓库里有哪些包、每个包有哪些版本、每个版本有哪些平台linux-64、win-64、osx-arm64 等、依赖关系是什么另一类是真正的包文件后缀通常是.conda或者历史遗留的.tar.bz2。关键在于conda 每执行一次安装或搜索会先把所有启用 channel 的repodata.json拉下来。这些索引文件单个就有几 MB压缩传输后依然不小全部 channel 加一起十几 MB 很常见。索引拿不到后面的包下载根本无从谈起。所以你会看到一种很典型的现象——进度条一直卡在Solving environment其实不是它算得慢而是它在等索引文件。这也解释了一个反直觉的事实换源带来的提速绝大部分收益来自索引文件而不是包本身。Anaconda 官方默认启用的 channel 是defaults它背后指向repo.anaconda.com下的几个路径主要是pkgs/main、pkgs/rWindows 上还多一个pkgs/msys2。另外还有个被大量项目依赖的第三方 channel 叫conda-forge它是独立维护的包更新更快、覆盖更广但默认不在defaults里需要显式指定或者单独配置。1.2 不换源时你会遇到的几类具体症状我把这些年见过的表现归成几类你可以对照一下自己中了几条长时间卡在Solving environment几分钟甚至十几分钟没有反应最后要么超时要么给出一个莫名其妙的解。CondaHTTPError: HTTP 000 CONNECTION FAILED这个报错的基本含义是连接都没建立起来多半是握手阶段就被掐了。下载速度长期停留在几十 KB/s一个几百 MB 的包要下半小时中间还可能断。下载到 90% 左右突然失败然后重试又是从头开始反复几次最后包里出现损坏的文件装完import就报奇怪的错。PackagesNotFoundError明明官方仓库里有的包本地就是搜不到。部分包下载成功、部分包超时导致环境处于半成品状态激活时提示缺依赖。这里面最坑的是第四种。因为它不报错你以为装好了等到跑代码时才炸排查方向还特别容易跑偏——有人会去怀疑 Python 版本不对、CUDA 不匹配其实只是包文件本身没下完整。1.3 换源能解决什么不能解决什么把预期摆正后面就不会失望。国内镜像源能解决的是传输链路问题索引和包的拉取速度会有一个数量级的差别超时和中断的概率大幅下降。它解决不了的是下面这几件事第一同步延迟。镜像站是定期从上游同步的通常几小时到一天不等。上游刚发布的版本镜像上可能还没有。这也是为什么偶尔会遇到官网明明写了这个版本我conda search就是找不到。这时候可以临时指定官方 channel 装一个包装完再切回来不必为了一个包把全局配置改掉。第二覆盖广度。不同镜像站同步的 channel 范围不一样有的只同步pkgs/main有的连conda-forge、pytorch这类 cloud channel 也一起同步了还有的只同步了一部分。选源的时候要看清楚它到底同步了哪些。第三pip 的源是另一套。conda 换了源pip install依然走 PyPI 官方地址。大量包在 conda 仓库里根本没有只能靠 pip所以这两套配置必须都做。这一点在后面的第 4 节会展开。2. 常用国内镜像源怎么选以及我自己的搭配现在做 conda 镜像的站点不少各有各的特点。我把常用的几个整理成一张表方便你按需挑。镜像站conda 地址前缀相对特点适用场景清华 TUNAhttps://mirrors.tuna.tsinghua.edu.cn/anaconda/文档最全同步范围广archive目录可下安装包首选主源新老用户都合适阿里云https://mirrors.aliyun.com/anaconda/带宽足同步较勤CDN 覆盖好清华偶发抽风时的备份中科大https://mirrors.ustc.edu.cn/anaconda/老牌站点cloud channel 同步较齐全教育网环境上海交大https://mirror.sjtu.edu.cn/anaconda/教育网内速度好校园网用户腾讯云https://mirrors.cloud.tencent.com/anaconda/云厂商链路公网表现不错云服务器上跑任务2.1 为什么我把清华放在第一位不是因为别的而是它的文档写得最清楚——每个 channel 对应哪个路径、哪些是历史遗留、哪些已经不再维护都标得明明白白。比如pkgs/free这个 channel早年是默认启用的后来 Anaconda 把免费 channel 合并进了pkgs/mainfree就基本停止更新了。如果你从某篇很老的教程里抄配置还在往channels里塞pkgs/free那你在这一步就会白白多等一次索引拉取还容易把版本解析带到旧包上。这种细节只有文档齐全的站点才会提醒你。另外清华镜像的anaconda/archive/目录值得一提它存的是 Anaconda 安装包本身的历史归档。很多人下载安装程序时是去官网下的速度慢得让人怀疑人生。直接在镜像的archive目录里找对应的安装包下起来快得多。这是换源这件事往前延伸的一步——别等到装完了才想起来换。2.2 要不要同时配好几个镜像源我见过有人图省事把四五家镜像源的地址一股脑全写进channels里。这个做法我个人非常不推荐原因有三个一是索引拉取次数成倍增加。每多一个 channel就要多拉一份repodata.json启动开销直接翻倍而你实际用到第二个源的几率很低。二是版本解析会被干扰。conda 在多个 channel 之间挑包时如果同一个包在多个源里都有选出来的结果可能和你预期不一样尤其是各镜像同步进度不一致的时候同一份environment.yml在不同机器上解出来的版本可能不同。三是出错时难以定位。报错里只会告诉你某个 URL 失败配置越长越难判断问题出在哪一行。我的做法是主源选一家其他的只在临时需要时用-c参数显式指定。比如conda install -c https://mirrors.aliyun.com/anaconda/pkgs/main somepackage用完即走不影响全局。2.3 安装包和索引是两个不同的目录别搞混再强调一个新手最容易混淆的点archive目录放的是 Anaconda 发行版安装包是给人手动下载安装用的pkgs/main这类目录放的才是 conda 安装包。两者的用途完全不同配置文件里要填的是后者。我见过有人把archive的地址填进channels然后conda install一直报错查了半天。记住这个区别能省你半小时。3..condarc到底该怎么写一份可以直接抄的配置.condarc是 conda 的配置文件YAML 格式。所有conda config命令最终都是在改这个文件所以直接手写完全没问题而且更可控。3.1 文件放在哪三个平台的路径差异WindowsC:\Users\你的用户名\.condarc。注意文件名以点开头在资源管理器里属于隐藏文件需要开启显示隐藏文件才能看到。用记事本直接新建时容易存成.condarc.txt务必在另存为时把保存类型选成所有文件。Linux / macOS~/.condarc也就是当前用户的家目录下。全局配置Windows 上还可能是C:\ProgramData\Anaconda3\.condarcLinux 上是安装目录下的.condarc。全局配置影响这台机器上的所有用户。优先级上环境变量CONDARC指定的路径最高然后是用户目录下的最后才是安装目录下的。排查我改了配置怎么没生效这类问题时先确认你改的是哪个文件、实际生效的又是哪个。3.2 用命令行写还是手写文件命令行方式长这样conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r conda config --set show_channel_urls yes这里有个非常关键、但教程里经常一句话带过的细节--add channels是把新地址插到列表最前面也就是优先级最高。所以如果你想让pkgs/main的优先级高于pkgs/r就得先加pkgs/r再加pkgs/main。顺序写反了不会报错但选包结果会不一样这种问题排查起来很痛苦。另外反复执行--add会在列表里留下重复项配置文件看起来一团糟。所以我现在基本不用命令行加 channel而是直接手写文件——一次写清楚改起来也直观。3.3 一份完整配置示例与逐行解读下面这份是我在多数机器上用的版本主源清华channels: - defaults show_channel_urls: true channel_priority: flexible default_channels: - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2 custom_channels: conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud pytorch: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud nvidia: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud逐行说明一下。channels下面写defaults代表我要用默认 channel但实际地址由下面的default_channels决定。这一步是整份配置里最重要的一环如果你只写了default_channels却没有在channels里保留defaultsconda 会认为你不想用默认 channel而跑去连真正的官方地址镜像等于白配。反过来如果channels里写了defaults但没写default_channels那defaults就还是指向官方地址。两边必须配合。show_channel_urls: true的作用是在conda install的输出里显示每个包是从哪个地址拉下来的。强烈建议打开——它是你验证配置是否生效最直接的证据出了问题也能一眼看到失败的 URL。channel_priority控制多个 channel 之间的选包策略。取值有strict、flexible、disabled。strict是严格按 channel 顺序前面的 channel 里有就不再往后找flexible是折中优先考虑版本新旧disabled则完全不管来源。新版 conda 默认是flexible。如果你遇到我不想要 conda-forge 的版本但它就是被选中了这种情况可以改成strict试试。default_channels就是前面说的默认 channel 的实际地址把三条路径分别指向镜像。注意这里写的是pkgs/main、pkgs/r、pkgs/msys2没有pkgs/free——那个已经不再需要了。custom_channels是给第三方 channel 做映射用的。它的工作方式是这样的你写conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud那当你执行conda install -c conda-forge xxx时conda 实际访问的就是https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge。这个机制的好处是你可以保留-c pytorch、-c nvidia这种习惯写法不用每次都换成完整 URL但流量已经走了镜像。3.4 关于nodefaults的取舍你可能会在别人的配置里看到channels下写着- nodefaults。它的含义是彻底不使用默认 channel只从显式列出的 channel 里找包。这么做通常是为了避免defaults和conda-forge混用导致的依赖冲突——因为 Anaconda 官方 channel 的包和 conda-forge 的包在编译选项上有时候不兼容混着用会解出一个奇怪的组合。但这里有个前提如果你的nodefaults写上了同时又没有别的替代 channel那你就连 Python 解释器都装不上了。所以这套写法适合项目明确全部使用 conda-forge 生态的场景普通用户不建议一上来就这么写。我的建议是新手先用defaults加镜像等真的遇到冲突了再考虑strict优先级或者nodefaults不要提前给自己加难度。3.5 写完别忘了清缓存改完配置文件如果直接conda install很可能发现怎么还是慢。原因是 conda 会把拉到的repodata.json缓存在本地配置改了但缓存没刷新它还是会去原来的地址取索引。所以改完配置后的标准动作是conda clean -i-i表示只清理索引缓存不动已经下载的包。这一步做完再执行安装才是真正在验证新配置。如果想更彻底地腾空间可以用conda clean --all但那会连下载好的包缓存一起清掉下次安装要从头下视情况使用。4. pip 也得一起换不然前面白忙这是我见过最常见的认知盲区费半天劲把 conda 的源换好了然后pip install依然慢得像蜗牛。因为 conda 和 pip 是两套完全独立的依赖管理系统源也是两套。4.1 什么时候必须用 pipconda channel 里收录的包以数据科学、科学计算为主覆盖面虽然广但不是全量。你会在这几种情况下被逼到 pip包只发布在 PyPI 上conda 仓库里压根没有这时 conda 会给你一个PackagesNotFoundError。包在 conda 仓库里的版本严重落后而你需要新版本。一些纯 Python 的轻量库只提供了源码包sdistconda 里没有对应的构建版本。项目自带的requirements.txt本质就是给 pip 用的。所以一个真实可用的开发环境通常是 conda 装大头Python 解释器、科学计算栈 pip 补小件业务库、框架库的组合。4.2 pip 配置的三种写法第一种命令行写入配置文件。这是最省事的pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple pip config set global.trusted-host pypi.tuna.tsinghua.edu.cn执行完它会自动把配置写到该平台对应的位置。trusted-host这一项在老版本 pip 上是为了绕开证书校验的问题新版 pip 访问清华源通常不需要了加上也无害。第二种直接手写配置文件。位置是Windows%APPDATA%\pip\pip.ini也就是C:\Users\用户名\AppData\Roaming\pip\pip.iniLinux / macOS~/.config/pip/pip.conf老版本也可能读~/.pip/pip.conf内容示例[global] index-url https://pypi.tuna.tsinghua.edu.cn/simple extra-index-url https://mirrors.aliyun.com/pypi/simple/ trusted-host pypi.tuna.tsinghua.edu.cn mirrors.aliyun.com timeout 120这里要提醒一句extra-index-url虽然看着方便但它有个副作用——pip 会同时在主源和附加源里找一个包的最新版本。如果两个源同步不一致可能出现同一份requirements.txt在不同时间装出不同版本的情况让构建结果不可复现。我在需要严格版本控制的项目里会把extra-index-url去掉只留一个主源。timeout默认是 15 秒在国内网络环境下偶尔偏短调到 120 能少一些无谓的失败重试。第三种临时指定。不想改全局配置时直接用参数pip install -i https://pypi.tuna.tsinghua.edu.cn/simple somepackage做实验、装一次性工具的时候很方便。优先级顺序是命令行参数 环境变量PIP_INDEX_URL 用户级配置文件 全局配置文件。排查为什么我配了源但没生效时按这个顺序从前往后查。4.3 conda 和 pip 混用的几条原则混用本身没问题但有几条规矩最好守住否则环境迟早会乱第一条尽量先 conda 后 pip。conda 的依赖解析器知道所有已安装包的完整依赖关系而 pip 装进去的东西对它来说是黑盒。如果你先用 pip 装了某个包再用 conda 装一个依赖它的包conda 可能不知道已有的版本直接覆盖或者装出冲突。第二条同一个包不要既 conda 装又 pip 装。这种双份状态下Python 到底 import 到哪一个取决于site-packages的搜索顺序非常难以预测而且conda list里会出现两条同名记录pip 装的那条会标注来源为 pypi。第三条别用pip install --user。它会把包装到用户目录和 conda 环境的site-packages分离开导致环境边界模糊。在虚拟环境里就老老实实装进虚拟环境。第四条用conda list定期体检。它能列出每个包的来源哪些是 conda 装的、哪些是 pip 装的一目了然。环境出问题时第一件事就是看这个列表。5. 完整实操流程从零配到的全过程记录上面讲的是原理和原则这一节把整套流程串一遍你可以直接照着敲。5.1 第一步备份并清理旧配置如果之前改过.condarc先备份# Linux / macOS cp ~/.condarc ~/.condarc.bak# Windows PowerShell Copy-Item $env:USERPROFILE\.condarc $env:USERPROFILE\.condarc.bak然后清理掉旧的 channel 配置。用命令行清比较稳妥conda config --remove-key channels这条命令会把channels这一项整体移除得到一个干净的起点。如果执行时报key 不存在说明你本来就没配过可以忽略。注意conda config --remove-key会直接删掉配置项没有回收站。所以备份这一步别省尤其是配置文件里还有别的重要设置的时候。5.2 第二步写入新配置用编辑器打开~/.condarcWindows 上是C:\Users\用户名\.condarc把第 3.3 节那份配置粘进去保存。保存时注意编码用 UTF-8 无 BOM。Windows 记事本在某些版本下会默认写入带 BOM 的 UTF-8conda 解析 YAML 时可能报ScannerError之类的错。如果遇到奇怪的解析错误先怀疑编码用 VS Code 之类的编辑器另存为 UTF-8 就好。5.3 第三步清索引缓存并验证配置conda clean -i conda config --show channels conda config --show-sourcesconda config --show channels应该输出你刚配的channels列表conda config --show-sources会告诉你配置是从哪个文件读进来的——如果你改了 A 文件但它读的是 B 文件这里能立刻发现。再补充一条conda info的输出里有一段channel URLs会列出当前所有生效的实际地址。看到都是mirrors.tuna.tsinghua.edu.cn开头就说明配置真的到位了。5.4 第四步实测一次安装验证最直接的方式是建个环境conda create -n mirror-test python3.11 numpy pandas -y加了-y是为了跳过交互确认。执行过程中留意两件事一是索引拉取阶段是不是几秒钟就过去了换了源之后应该很快二是有没有出现mirrors.tuna.tsinghua.edu.cn的 URLshow_channel_urls: true打开了就应该能看到。我自己的经验是同样的包组合不换源经常要等几十秒到几分钟还可能中途超时换源之后通常十几二十秒就结束了。这个是能直观感受到的差别。5.5 第五步装一个深度学习环境拿 PyTorch 举例因为它是新手最常卡住的地方。先建环境conda create -n torch-env python3.11 -y conda activate torch-env然后有两条路线可以走。路线一走 conda。如果你的.condarc里已经像前面那样把pytorch映射到了镜像 cloud 目录conda install pytorch torchvision torchaudio pytorch-cuda12.1 -c pytorch -c nvidia -y注意pytorch-cuda的版本号要和你的显卡驱动匹配。先用nvidia-smi看一下驱动版本和它支持的最高 CUDA 版本选择不超过这个上限的版本。这里有个概念要分清楚conda 装的pytorch-cuda是运行时库不需要你系统里另外安装完整的 CUDA Toolkit它自带运行环境。很多人误以为要先装几个 GB 的 CUDA 安装包其实不用。路线二走 pip。有些时候 conda 那边解依赖特别慢或者镜像上的版本落后用 pip 反而更快pip install torch torchvision torchaudio -i https://pypi.tuna.tsinghua.edu.cn/simpleLinux 和 Windows 下PyPI 上的 torch 默认就是带 CUDA 支持的构建装完torch.cuda.is_available()应该返回True。如果返回False先检查驱动再检查装的是不是被平台限制的版本。装完做一次验证python -c import torch; print(torch.__version__); print(torch.cuda.is_available())5.6 第六步装不上时的处理顺序如果某一步失败了按这个顺序试绝大多数情况能解决先conda clean -i清索引缓存重试一次。确认包名拼写并conda search 包名看镜像里到底有没有这个版本。换临时源试试conda install -c https://mirrors.aliyun.com/anaconda/pkgs/main 包名。如果这个包 conda 仓库确实没有转 pip。特殊情况可以临时指定官方 channel但那一个包会走慢速链路做好等的准备。6. 报错速查表和我踩过的几个坑6.1 常见报错对照表报错信息常见原因处理方式CondaHTTPError: HTTP 000 CONNECTION FAILED网络链路不通、地址不可达、配置文件里有失效 URL检查conda info里的 channel URLs清缓存换镜像源CondaHTTPError: HTTP 404镜像里没有对应路径或 channel 名拼写错误核对地址路径确认镜像是否同步了该 channelPackagesNotFoundError包不在已启用 channel 中或索引未刷新conda clean -iconda search确认转 pipSSL error/ 证书校验失败系统时间不对、企业网络有证书拦截校准系统时间必要时配置ssl_verifySolving environment长时间无响应索引拉取慢或依赖冲突导致解析爆炸换源开启libmambasolver缩小版本范围ScanError/ScannerError.condarc编码不对比如带 BOM用编辑器另存为 UTF-8 无 BOMconda: command not found未初始化 shell 或未配置环境变量执行conda init重开终端Linux 下检查环境变量装完import报缺文件包下载中断导致文件损坏conda clean --all后重装配置明明改了但没反应改的不是实际生效的那个配置文件conda config --show-sources确认来源6.2 文档里不会写的几个细节索引缓存是个隐形杀手。第一次写配置没生效八成是缓存没清。养成改配置必conda clean -i的习惯能省掉大量困惑。.condarc里的defaults不能省。这是踩坑频率最高的一条。很多人只写了default_channels就以为搞定结果 conda 根本不认还是走官方地址。两个字段是配套的。校园网和企业内网可能有自己的镜像。有些高校的网络里访问校园自建镜像速度飞快比公网镜像还快。如果你在学校里可以问问师兄师姐有没有内部地址。企业内网同理有时候内网会搭代理缓存用内网地址比公网源好得多。镜像同步延迟会骗你。上游刚发的版本镜像上没有很正常。不要因为它没同步就判断镜像源不好用换一家试试或者等一天再看。版本要锁的时候把源也一起锁。如果你的项目要复现实验结果光锁版本号不够——因为不同镜像的同步进度不同同一份environment.yml在不同时间不同机器上解出来的实际版本可能不同。我的做法是导出完整的environment.yml包含精确版本和 build 号并在团队里统一使用同一家镜像源同时优先考虑让 conda 生成conda-lock之类的锁定文件。这样重建环境时结果才一致。装完记得conda list看一眼来源。尤其在你混用过 conda 和 pip 之后确认没有同名双份的包能避免后面出现为什么我的版本和代码里不一样这类玄学问题。6.3 顺手能做的一些提速小动作启用 libmamba solver。conda 从 23.10 版本开始默认使用 libmamba 作为依赖解析引擎解决Solving environment慢的效果非常明显。如果你用的是较老的版本可以手动装conda install -n base conda-libmamba-solver -y conda config --set solver libmamba实测下来复杂的依赖解析场景下速度提升是很可观的。把包缓存目录放到 SSD 上。如果系统盘空间紧张你可能把 conda 的包目录挪到了机械盘那安装时的解压和链接会明显变慢。用conda config --show pkgs_dirs看看缓存在哪必要时在.condarc里用pkgs_dirs指定一个更快的分区。定期清理。conda clean --all能清掉没用的包缓存和 tarball释放空间。我大概一两个月清一次尤其是频繁建环境的时候。用 mamba 作为替代前端。mamba 是 conda 的兼容替代命令基本一样解析速度快很多。装法是在conda-forgechannel 里装mambaconda install -c conda-forge mamba -y之后把常用的conda install换成mamba install就行用法完全兼容。最后分享一个我自己一直在用的小习惯每次换新机器先不急着装任何包先把.condarc和 pip 配置这两份文件复制过去跑一次conda clean -i再用一个几十 MB 的小包测一下速度。确认链路通了再去干正事。这个顺序看起来多余但它能在几分钟内把网络问题和依赖问题彻底隔离开——一旦后面真的报错你就知道问题一定出在包本身而不是源。这个判断力的价值比省下的那几分钟大得多。
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

◈

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

◐

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

▲

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。