☰
Ubuntu与Anaconda换源全攻略:apt、conda、pip镜像配置与避坑指南
2026/9/30 1:13:17 网站建设 项目流程

在Ubuntu上折腾Anaconda环境,十个有九个都被“慢”字折磨过。不管是conda install pytorch卡出天际,还是apt-get update半天没反应,归根到底都是卡在“默认源离你太远”这个问题上。我这台装了双系统的Ubuntu机器,从22.04一路用到24.04,中间换了至少三次源方案,踩过404、踩过SSL报错、也踩过源混用导致的依赖冲突,今天这篇就专门把apt源、conda源、pip源这三件事一次说透。适合刚装完Ubuntu和Anaconda的新手,也给那些觉得“自己源没问题”的老手一个排查思路——毕竟换源不是改一行配置就完事,后面藏着一堆坑。

1. 换源前必须搞清楚的底层逻辑

1.1 为什么在Ubuntu上一定要换源

先说最根本的问题:官方源到底慢在哪。Ubuntu的apt默认源指向的是archive.ubuntu.com,conda默认源指向的是repo.anaconda.com,pip默认源是pypi.org,这些服务器的物理位置都在国外。国内访问的时候,数据包要经过长距离的国际链路传输,丢包和延迟会明显放大,表现就是你看到的“几十KB/s的龟速下载”或者“干脆超时无响应”。

镜像站的原理其实特别简单:国内的一些高校和云厂商搭了服务器,定期从上游官方仓库做一次全量同步,把整个软件仓库“搬到”国内,然后对外提供下载服务。既然物理距离变近了,速度自然就上来了。实测的情况下,同一台机器,还源前conda下载速度只有几十KB,换完清华源能稳定跑到10MB/s以上,差距非常直观。

这里有个容易混淆的点:apt源、conda源、pip源,它们管的是三套完全不相干的东西。用apt install装的是Ubuntu系统包,比如gcc、openssh-server;用conda install装的是Anaconda发行版维护的Python包和预编译库,比如cudatoolkit、pytorch;用pip install装的是PyPI上的Python包,比如requests、django。三者互不替代,所以换源也是三件事,漏掉任何一个,总有一个地方会继续慢。

1.2 三类源分别解决什么问题

源类型对应命令管理内容典型配置位置
apt源apt update/apt installUbuntu系统级软件包/etc/apt/sources.list
conda源conda install/conda createAnaconda虚拟环境包~/.condarc
pip源pip installPython包~/.pip/pip.conf

注意表格里的配置位置是针对单用户的,如果你机器上有多个用户都要用conda,或者你有root权限想给整台机器做全局配置,那么conda源还可以写到/etc/conda/.condarc,pip源可以写到/etc/pip.conf,后面我会单独讲这个区别。

很多人喜欢把conda源和pip源混为一谈,但这两个的镜像仓库完全是独立的。清华源上,conda走的是https://mirrors.tuna.tsinghua.edu.cn/anaconda/这个路径,pip走的是https://pypi.tuna.tsinghua.edu.cn/simple这个路径。你要是把pip的源地址填到conda的配置文件里,它肯定报404,反过来也一样。

1.3 换源前必须确认的三条基础信息

动手之前,先把这三样东西搞清楚,不然折腾半天可能白干。

第一,Ubuntu的版本代号。不同版本的apt源地址里,路径最后一段是版本代号,写错了直接404。查看命令:

lsb_release -cs

如果是24.04,输出是noble;22.04输出是jammy;20.04输出是focal。后面写源配置的时候,这个代号要精确对应。

第二,Anaconda的安装路径。这决定了conda命令的归属,也影响你后面对环境变量的判断。用which conda查看,如果输出类似/home/yourname/anaconda3/bin/conda,说明是用户目录安装;如果输出/opt/anaconda3/bin/conda,就是系统级安装。两种安装方式下,.condarc配置的生效路径会有差异。

第三,当前pip配置里的残留项。很多人以前手动改过pip源,时间久了就忘了。先跑一下:

pip config list

如果里面已经有一堆旧配置,后面可能需要先清理,否则新改的配置可能被旧的覆盖掉,排查问题的时候特别容易困惑。

2. Ubuntu系统级apt源更换(基础中的基础)

2.1 备份源文件,别上来就删

第一步永远是备份。虽然改坏了一个配置文件不至于让系统瘫痪,但apt源坏了之后,你连apt install都没法用,手边又没有离线包的时候会非常被动。备份很简单:

sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak

现在较新版本的Ubuntu把源拆成了两种形式:传统的/etc/apt/sources.list单文件,和Ubuntu 24.04开始引入的/etc/apt/sources.list.d/ubuntu.sources新格式。如果你的系统是后者,上面那行cp命令可能发现文件不存在,那就备份整个目录:

sudo cp -r /etc/apt/sources.list.d /etc/apt/sources.list.d.bak

这里给个实际经验:不管系统默认用的是哪种格式,备份做一下不亏。因为镜像站对新格式的支持也是最近才跟上的,万一你要降级回原版系统源,有个备份文件在,两秒钟就能还原。

2.2 编辑apt源配置,用清华镜像

我用清华源比较多,其他镜像站的配置方式几乎一样,就是域名不同。如果你用的是传统sources.list格式,直接编辑:

sudo vim /etc/apt/sources.list

然后把文件里的所有内容替换成下面这些。注意noble要改成你实际的版本代号:

deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ noble main restricted universe multiverse deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ noble-updates main restricted universe multiverse deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ noble-backports main restricted universe multiverse deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ noble-security main restricted universe multiverse

如果你是Debian系的sources格式,也就是24.04默认的ubuntu.sources,那内容是另一种写法:

Types: deb URIs: https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ Suites: noble noble-updates noble-backports noble-security Components: main restricted universe multiverse Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg

扩展一句,很多教程喜欢同时打开deb-src源,也就是源码包,但我个人建议默认关掉。deb-src会额外拉取大量的源码索引,拖慢apt update的速度,而且对绝大多数普通用户来说用不上。真需要源码包的时候再临时加一行注释打开就行,没必要平时开着给自己添堵。

2.3 apt update生效验证

改完配置,更新索引:

sudo apt update

这一步会重新拉取软件包列表,如果输出里的Hit和Get速度明显变快,没有404和Failed,就说明源生效了。然后再验证一下:

apt policy

这个命令会列出当前所有的源和优先级。如果看到http://mirrors.tuna.tsinghua.edu.cn/ubuntu/在列表里,且优先级是500,说明配置正确。

我遇到过一种情况:改完apt源之后apt update报Certificate verification failed,也就是证书验证失败。这个和清华大学镜像站的历史问题有关——早些年它用过自带证书,现在一般不会有这个问题。如果真遇到,先检查系统时间是不是不对,date命令看一下,时间偏差会导致TLS握手失败。别急着关证书验证,优先排查系统时间。

3. conda源配置(Anaconda加速的关键环节)

3.1 什么是.condarc,在哪生成

.condarc是conda的配置文件,名字前面带点,是隐藏文件。它控制着conda从哪下载包、显示什么渠道、是否开启strict channel优先级等。文件一般放在当前用户的家目录下:

cd ~ && touch .condarc

很多新手的误区是去Anaconda的安装目录找这个文件,其实那个目录是系统级的,优先级低于用户目录。除非你有特殊需求,否则统一配置在~/.condarc就对了。

我建议直接用conda config命令来生成和操作这个文件,而不是手动vim。命令式操作的好处是conda自己会处理好格式,不会因为写错缩进导致整个文件失效:

conda config --set show_channel_urls yes

执行完这条,你的~/.condarc文件就自动生成了,里面会多一行show_channel_urls: true。这一步相当于“初始化”了conda的配置文件机制,后面我们再往里灌镜像源配置。

3.2 写入清华conda镜像源

直接编辑~/.condarc,把下面这段内容放进去。我实测过,清华源是目前国内conda镜像里同步稳定、速度也靠谱的一个:

channels: - defaults show_channel_urls: true 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

解释一下这里的逻辑。channels里的defaults是让你继续使用默认的Anaconda仓库,但接着的default_channels把默认仓库的实际URL从官方地址重定向到了清华镜像。custom_channels解决的是第三方channel的映射——你写conda install -c conda-forge somepackage的时候,conda会去https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge找包,而不是去国外的conda.anaconda.org。

写得直白一点:如果你只改了channels但不改default_channels和custom_channels,那conda还是去官方地址拉包,换源等于没换。这是很多教程没讲到位的坑。

如果你更喜欢用中科大源或者阿里云源,把上面的域名整体替换就行。阿里云conda源的配置稍微有点不一样,它的路径不带anaconda这段,建议直接参照阿里云开发社区最新的配置样例,因为它的路径结构做过调整,旧教程里的URL很可能会404。

3.3 conda换源后的生效验证

改完源之后,不能直接conda install看效果,因为conda会缓存索引。正确操作是:

conda clean -i -y

这一步清除的是之前从官方源拉取的索引缓存。然后新建一个测试环境感受一下速度:

conda create -n test_speed python=3.10 -y

如果输出里出现Downloading and Extracting Packages且进度条刷刷走,说明源生效了。如果速度还是慢,那多半是http而不是https的遗留配置,或者在缓存清理这一步漏了。

顺手看一眼当前实际生效的源:

conda config --show channels conda config --show default_channels

这两条命令会打印出conda解析后的channel地址,核对一下域名是否已经指向了镜像站。

3.4 多用户环境的conda源配置差异

单用户配置.condarc在~/.condarc,但如果是多用户共用的Anaconda,最好在/etc/conda/.condarc这个路径做全局配置。这个文件的优先级低于用户级,也就是说每个用户可以在自己的~/.condarc里覆盖全局配置。

还有一个细节:conda的channel优先级。如果你在channels里写了多个源(比如同时写了defaults和conda-forge),conda会从左到右依次查找包,左侧优先级更高。默认策略下,如果前面的源找不到某个包,它会自动去后面的源找。但如果你开了channel_priority: strict,那么conda只会从优先级最高的channel里找包,找不到就直接报错。这个设置适合对包来源有强制要求的场景,普通用户保持默认的flexible就好。

4. pip源配置(Python包管理加速)

4.1 pip配置文件的位置与优先级

pip源和conda源是两回事,很多新手在Anaconda环境里直接用pip install,结果发现还是慢,原因就是pip还在用官方源。pip的配置文件查找有几个层级,从高到低是:

  1. 命令行参数(-i指定)
  2. 用户级配置文件:~/.pip/pip.conf或~/.config/pip/pip.conf
  3. 全局配置文件:/etc/pip.conf或/etc/xdg/pip/pip.conf

这里有个好记的口诀:越靠近用户,优先级越高。命令行参数最高,其次用户配置,最后系统配置。所以如果你以前在命令行里硬编过-i参数,那配置文件怎么改都会被覆盖,排查的时候就看看有没有什么脚本里写死了源地址。

另外要注意:~/.pip/pip.conf和~/.config/pip/pip.conf如果同时存在,前者生效,后者被忽略。建议统一使用~/.pip/pip.conf,因为Anaconda环境下pip对~/.pip目录的兼容性最好。

4.2 修改pip源配置文件

手动创建并编辑~/.pip/pip.conf:

mkdir -p ~/.pip vim ~/.pip/pip.conf

填入清华源配置:

[global] index-url = https://pypi.tuna.tsinghua.edu.cn/simple trusted-host = pypi.tuna.tsinghua.edu.cn

如果更愿意用阿里云,就写:

[global] index-url = https://mirrors.aliyun.com/pypi/simple/ trusted-host = mirrors.aliyun.com

这里有个网上讨论比较多的问题:trusted-host到底要不要写。它是用来跳过HTTPS证书校验的,但在清华和阿里这些官方镜像站的场景下,它们的证书都是正规机构签发的,理论上不需要写。我之前踩过一个坑:某些老教程里把trusted-host写得很大,导致pip不再校验证书,虽然速度没影响,但安全性上打了折扣。我的建议是:优先只配置index-url,如果pip报SSL: CERTIFICATE_VERIFY_FAILED,再回头检查系统证书链,而不是盲目加上trusted-host。如果确定是镜像站自身的证书问题或者内网环境需要,再加也不迟。

4.3 pip源换完怎么验证

最直接的验证方式是安装一个小体积的包,看日志里的URL:

pip install --no-cache-dir requests -v

-v参数会输出详细的下载日志,正常情况下你会看到类似Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple的信息。如果打印的还是https://pypi.org/simple,说明配置没生效,按优先级顺序去排查是不是配置文件路径写错,或者有环境变量PIP_INDEX_URL干扰了。

另外强烈建议给pip加一个默认的no-cache-dir习惯,或者定期用pip cache purge清理缓存。缓存的坑在于:有时候你换源之后装包看似很快,实际上用的是旧源拉下来的缓存文件,时间长了把新旧包的版本搞混。清一次缓存,让pip从新源重新拉一遍,至少装大包之前是值得做的。

5. 换源后的踩坑实录与排查技巧

5.1 conda更新报404:版本与镜像兼容问题

清华镜像站对conda版本是有最低要求的。如果你用的conda版本太老(比如4.8以下),它请求的仓库元数据路径和老版本的repo格式不匹配,镜像站会返回404。这个问题的特征是:其他源都能用,唯独conda update的时候报CondaHTTPError: 404 NOT FOUND。

解决办法按顺序来:先试着直接升级conda本身:

conda update conda -c defaults

如果这条命令也报404,那就临时加一个官方源地址把conda升上来:

conda update conda -c https://repo.anaconda.com/pkgs/main

升完级再切回镜像源配置,问题一般就解决了。这属于老机器新场景的经典坑,重装系统几乎不会遇到,但如果你是从很旧的Anaconda版本一路升级上来的,那就很容易撞上。

5.2 pip换源后某些包反而装不了

一个真实经历:我在清华pip源上装某个包的夜间版,结果它报No matching distribution found。查了一下,发现这个包在官方PyPI上确实存在,但清华源的同频率是定时同步的,它还没有把最新的包同步过来。这不是配置问题,而是镜像源同步延迟。

这种情况下有两个选择:一是等镜像站同步完成,通常也就一两天;另一个是临时指定官方源装这一个包:

pip install package_name -i https://pypi.org/simple

注意这个-i参数只对当前这一条命令生效,不会改变全局配置。这是一个很实用的临时切换手段,不会污染你的环境。

5.3 conda和pip混用导致的源冲突

这个问题堪称最常见的“伪源”问题。很多教程让用户在conda环境里用pip安装包,说速度更快,这么干本身没错,但如果你pip的源和conda的源都指向不同镜像,那会导致同一个包在两个仓库里的版本不一致,时间长了环境变得非常混乱。

我的习惯是:在conda环境里装包以conda为主,conda源配清华;如果某个包conda上没有,才用pip,并且pip源也配同一个镜像站。宁可两个都配清华,也不要用“conda用清华、pip用阿里”这种混搭。镜像站的同步时间点不同,包版本可能存在几个小时到几天的偏差,一旦你因为某个包追新版本,可能就是怀疑人生的开始。

还有一个非常隐蔽的坑:在conda环境里使用pip install --user。--user参数会把包装到~/.local目录下,而不是conda环境里,导致你在激活的环境里import不到,或者换个环境神奇的“复活”。这不是源的问题,是环境隔离被绕过了。在conda环境里,永远不要加--user。

5.4 速度慢的终极排查法

如果换完源还是慢,别急着怀疑镜像站。先做一次基准测试,看看到底是网络问题还是源问题:

wget -O /dev/null https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/repodata.json

这条命令从清华源拉取一个相对较大的文件到空设备,测的就是纯粹的网络下载速度。如果这个速度正常,说明你到镜像站的链路没问题,那问题可能出在conda或者pip的HTTP请求并发配置上。可以试试在conda配置里加一行:

remote_max_retries: 5 remote_read_timeout_secs: 30.0

这两个参数可以缓解网络抖动导致的下载中断问题。如果连wget都慢,那基本就是你本地网络到目标机房的线路问题,换哪个源都差不多。

5.5 镜像站的Notices与公告

镜像站并不总是无条件的稳定。清华、中科大这些镜像站偶尔会因为磁盘容量、上游故障等原因暂停某个仓库的同步,或者调整目录结构。如果你隔了很长一段时间回来,发现某个源突然404了,先别急着怀疑自己配置有误,去镜像站的官网公告页看一眼,看看是不是有临时变更。

6. 一些我个人用着顺手的经验补充

先说结论:我个人的最终方案是apt源用清华,conda源用清华主仓库+conda-forge,pip源用阿里。这套组合我用了大半年基本没出过问题。

有一个小技巧值得分享:每次配置完源之后,建议做个备注文件放在家目录,比如source_config_notes.md,把这次换源的日期、使用的镜像站、改了哪几个文件都记下来。看起来很傻,但半年之后你再需要排查环境问题,这份简单的笔记能帮你省出至少半小时查历史配置的时间。

还有一个容易被忽略的点:ubuntu.sources格式和sources.list格式的转换。如果你用的是Ubuntu 24.04初版自带的ubuntu.sources格式,想换回sources.list旧格式,需要把/etc/apt/sources.list.d/ubuntu.sources里的内容改掉或者禁用。我自己就曾经同时启用两份源文件,apt update的时候拉重复数据,还因为两套源优先级不同,差点把包比较器的索引搞乱。稳妥的检查方式:

ls /etc/apt/sources.list.d/

看看这个目录下有哪些文件,确保不存在多个源的重复定义。

最后再提一个很多人没想到的点:Anaconda的pkgs/main仓库默认包含Python解释器、numpy等基础包,conda-forge仓库包含大量第三方扩展包。如果你用conda-forge的频率很高,建议在.condarc里把它的custom_channels配置好,否则每次-c conda-forge都会去官方源。这不是必然出错的场景,但确实是很多人配置完清华源之后,conda-forge渠道依然速度感人的原因。

说实话,换源这件事本身并不复杂,复杂的是换完之后,系统里可能残留下各种老配置和新配置互相打架的问题。我写这篇东西的核心目的,就是希望你在配置的时候就能预判这些坑,而不是等出了问题再回来翻文档。建议收藏起来,下次新装机器的时候照着走一遍,基本十分钟就能搞定。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询