1. 为什么 Ubuntu 下装 Anaconda 这件事值得单独写一篇
在 Ubuntu 上装 Anaconda,表面上看就是下载一个.sh文件、跑一条命令、一路回车的事。但我见过太多人卡在几个非常具体的地方:装完之后终端前面多了一个(base),每次开终端都自动激活,看着烦;conda activate xxx报CommandNotFoundError: run 'conda init' before 'conda activate';用sudo装完之后普通用户找不到 conda;装完发现系统自带的 Python 被顶掉了,python3指向变了,导致系统工具出问题。
这些坑的共同点是:它们都不是"安装失败",而是"装完之后环境乱了"。Anaconda 本身安装成功率很高,真正难的是装完之后怎么和 Ubuntu 系统 Python 和平共处。这篇就把从下载、校验、安装、初始化、换源、建环境、迁移目录到卸载的完整链路讲清楚,重点放在那些官方文档一笔带过、但实际会咬人的细节上。
适合谁看:刚在 Ubuntu(物理机、虚拟机、WSL 都算)上准备做 Python 开发的人;被conda init报错卡住的人;想把 conda 目录从系统盘挪到数据盘的人;以及装完之后发现终端变丑、想恢复干净的人。下面所有命令都在 Ubuntu 20.04 / 22.04 / 24.04 上实测过,路径和报错信息以这几个版本为准。
2. 装之前先想清楚:Anaconda、Miniconda、系统 Python 到底选哪个
2.1 三个东西的关系,用一句话说清
Ubuntu 自带一个 Python,通常在/usr/bin/python3,系统里很多工具(比如apt的部分脚本、ubuntu-drivers)依赖它。这个 Python 你绝对不能动,动了轻则某些命令报错,重则系统更新出问题。
Anaconda 是"一个自带 Python 的发行版",它把 Python 解释器、conda 包管理器、几百个常用科学计算库打包在一起,装在自己的目录里(默认~/anaconda3)。它不替换系统 Python,而是通过修改PATH和 shell 配置,让你在终端里优先用到它自带的 Python。
Miniconda 是 Anaconda 的精简版,只带 conda 和 Python,不带那几百个库。安装包大概 100MB 出头,Anaconda 完整版接近 1GB。
2.2 选哪个:看你的真实需求
| 方案 | 安装包大小 | 装完占用 | 适合场景 |
|---|---|---|---|
| Anaconda 完整版 | 约 900MB~1.2GB | 3~5GB | 新手、数据科学、不想一个个装 numpy/pandas |
| Miniconda | 约 100MB | 500MB 左右 | 老手、只要 conda 的管理能力、磁盘紧张 |
| 系统 Python + venv | 0 | 0 | 纯 Web 开发、不想引入 conda 体系 |
我的建议很直接:如果你是第一次在 Linux 上搭 Python 环境,装 Anaconda 完整版。多占的那几个 G 磁盘,换来的是不用折腾 numpy 编译、不用管 BLAS 链接、不用配 matplotlib 后端,这笔账划算。等你熟了,再换 Miniconda 也不迟。
注意:不要用
sudo安装 Anaconda。用 root 装到/opt或/root下,普通用户用不了,后面权限问题能烦死你。永远装到当前用户的家目录。
2.3 磁盘空间和路径的提前规划
装之前先df -h看一眼家目录所在分区。Anaconda 完整版装完加上后续建几个环境,轻松吃掉 10GB。如果你的/home是单独分区且不大,或者你用的是云主机系统盘只有 20GB,那就要提前决定:是装 Miniconda,还是把 conda 目录放到数据盘。
这里有个关键点:conda 的安装路径一旦定下来,后面迁移很麻烦(虽然能迁,但容易出问题)。所以宁可装之前多花两分钟想清楚。我一般推荐两种路径:
- 家目录够大:直接
~/anaconda3,最省事。 - 有数据盘:装到
/data/anaconda3这类路径,装的时候用-p指定。
3. 下载与校验:别跳过 sha256 这一步
3.1 拿到正确的下载链接
Anaconda 官方下载页会给出 Linux 版的.sh安装脚本。文件名格式类似Anaconda3-2024.xx-Linux-x86_64.sh。注意区分架构:绝大多数是x86_64,如果你用的是 ARM 机器(比如某些云主机、树莓派),要选aarch64版本,选错了装不上。
在服务器上没图形界面,用wget或curl直接拉:
cd /tmp wget https://repo.anaconda.com/archive/Anaconda3-2024.10-1-Linux-x86_64.sh版本号会随时间更新,去官网复制当前最新版的链接即可。下载慢的话,国内有镜像站提供同样的安装包,链接结构类似,把域名换掉就行。
3.2 校验完整性,这一步真的有用
大文件下载过程中断、被中间设备篡改、镜像站同步不完整,都会导致安装脚本损坏。损坏的脚本跑起来可能报各种莫名其妙的错,甚至解压到一半失败留下垃圾。校验方法:
sha256sum Anaconda3-2024.10-1-Linux-x86_64.sh把输出的一长串哈希和官网下载页给出的 sha256 值对比。必须完全一致。不一致就删掉重下,别抱侥幸心理。
提示:如果官网只给了 md5,那就用
md5sum。总之官方给什么校验值就用什么,别跳过。
3.3 给脚本加执行权限
下载下来的.sh默认没有执行权限,直接./xxx.sh会报Permission denied。两种做法:
chmod +x Anaconda3-2024.10-1-Linux-x86_64.sh ./Anaconda3-2024.10-1-Linux-x86_64.sh或者不改权限,直接用 bash 跑:
bash Anaconda3-2024.10-1-Linux-x86_64.sh第二种更省事,我一般用这种。
4. 安装过程逐屏拆解:每一屏在问你什么
4.1 许可协议和安装路径
运行脚本后,第一屏是许可协议,按回车翻页,翻到底会让你输入yes表示同意。这里必须完整输入yes,输入y不认。
接着会问安装路径,默认是~/anaconda3。如果你要装到别处,在这里输入完整路径。路径里不要有中文、空格,虽然理论上支持,但后续脚本调用容易出问题。
4.2 最后那个"是否 conda init"的问题,是最大的坑
安装快结束时,会问:
Do you wish the installer to initialize Anaconda3 by running conda init? [yes|no]这一屏是整篇最关键的地方。选yes和选no的区别:
- 选
yes:安装器会修改你的~/.bashrc,加入一段 conda 初始化代码。之后每次打开终端,会自动激活base环境,终端提示符前面出现(base)。 - 选
no:什么都不改,你需要自己手动初始化,或者每次手动 source。
很多人选yes之后后悔,因为(base)一直挂着,而且 base 环境里的 Python 会覆盖系统 Python,导致一些依赖系统 Python 的工具行为异常。
我的建议分两种情况:
- 新手、就想开箱即用:选
yes,然后按第 5 节把自动激活关掉。 - 对系统环境敏感、机器上跑着别的服务:选
no,之后按需手动初始化。
如果你已经手快选了yes又后悔,别急着重装,第 5 节有干净的恢复方法。
4.3 安装完成后先别急着用
安装脚本跑完,最后会提示Thank you for installing Anaconda3!。这时候当前终端里 conda 还不能用,因为.bashrc的修改要新开终端才生效。你可以:
source ~/.bashrc或者直接关掉终端重开。然后验证:
conda --version python --version which pythonwhich python应该指向~/anaconda3/bin/python。如果指向/usr/bin/python,说明初始化没生效,看下一节。
5. conda init 报错与 base 自动激活的彻底处理
5.1run 'conda init' before 'conda activate'到底怎么回事
这个报错几乎每个人都遇到过。原因是:conda activate这个命令本身是一个 shell 函数,不是可执行文件。它必须由 conda 的初始化脚本注入到你的 shell 里才能用。如果你只是把~/anaconda3/bin加进了PATH,那你能用conda命令,但用不了conda activate。
解决方法是执行一次初始化:
~/anaconda3/bin/conda init bash如果你用的是 zsh,就conda init zsh。执行完它会告诉你修改了哪个文件(通常是~/.bashrc),然后source ~/.bashrc或重开终端。
初始化之后,.bashrc里会多出类似这样一段:
# >>> conda initialize >>> # !! Contents within this block are managed by 'conda init' !! __conda_setup="$('/home/你的用户名/anaconda3/bin/conda' 'shell.bash' 'hook' 2> /dev/null)" if [ $? -eq 0 ]; then eval "$__conda_setup" else if [ -f "/home/你的用户名/anaconda3/etc/profile.d/conda.sh" ]; then . "/home/你的用户名/anaconda3/etc/profile.d/conda.sh" else export PATH="/home/你的用户名/anaconda3/bin:$PATH" fi fi unset __conda_setup # <<< conda initialize <<<这段代码不要手动改,它是 conda 自己管理的。要改行为,用conda config命令。
5.2 关掉每次开终端自动激活 base
初始化后默认每次开终端都激活 base,提示符变成(base) user@host:~$。想关掉:
conda config --set auto_activate_base false执行完重开终端,(base)就没了。需要时手动conda activate base或激活别的环境。
这个设置写在~/.condarc文件里。你可以cat ~/.condarc看看,里面就是一行auto_activate_base: false。
5.3 已经装乱了怎么干净恢复
如果你之前用sudo装过、或者手动往.bashrc里加过 PATH、或者装了两个版本,环境会很乱。恢复步骤:
- 打开
~/.bashrc,删掉所有和 conda/anaconda 相关的行,包括conda initialize那个块和手动加的export PATH=...anaconda3/bin...。 - 删掉安装目录:
rm -rf ~/anaconda3(确认路径没错再删)。 - 删掉配置:
rm -f ~/.condarc ~/.conda。 - 重开终端,
which python应该回到/usr/bin/python3。 - 按第 3、4 节重新装一遍。
注意:
rm -rf之前一定ls确认目录内容,别把家目录删了。这种低级错误每年都有人犯。
6. 换源:不换源你会在下载包时怀疑人生
6.1 为什么要换源
conda 默认从官方源下载包,国内访问速度经常只有几十 KB/s,装个 pytorch 能等到天亮。换成国内镜像源,速度能到几 MB/s 甚至十几 MB/s。
6.2 换源的正确姿势
不要一条条conda config --add channels手动加,容易加乱顺序。直接编辑~/.condarc:
conda config --set show_channel_urls yes然后vim ~/.condarc,写入类似内容(以清华源为例,具体地址以镜像站当前公告为准):
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保存后清一下缓存:
conda clean -i6.3 换源后的两个常见问题
问题一:CondaHTTPError或 SSL 报错。多半是镜像地址写错、或者镜像站临时不可用。先用curl测一下地址通不通,再检查.condarc缩进(YAML 对缩进敏感,必须用空格不能用 Tab)。
问题二:某些包在镜像源里找不到。镜像同步有延迟,新发布的包可能还没有。临时用官方源装:conda install -c defaults 包名,或者干脆用 pip 装(见 6.4)。
6.4 conda 和 pip 混用的边界
conda 管不了的包(比如很多纯 Python 的小众库),用 pip 装。但要注意:在 conda 环境里用 pip,一定要用这个环境自己的 pip,也就是~/anaconda3/envs/环境名/bin/pip,而不是系统的 pip。激活环境后直接pip install通常没问题,因为激活时 PATH 已经指向环境内的 pip。
混用的风险是:pip 装的包 conda 不知道,conda list里能看到但conda remove删不干净。所以原则是:能用 conda 装的就用 conda,conda 没有的再用 pip,并且尽量先 conda 后 pip,别反过来。
7. 建环境、迁移目录与卸载:长期使用的三件事
7.1 为什么一定要用虚拟环境
base 环境是 conda 自己的"系统环境",不要往 base 里装项目依赖。原因很简单:项目 A 要 numpy 1.20,项目 B 要 numpy 1.26,装一起必冲突。每个项目一个独立环境,互不干扰。
建环境:
conda create -n myproject python=3.9 conda activate myproject-n后面是环境名,python=3.9指定版本。建完激活,which python应该指向~/anaconda3/envs/myproject/bin/python。
常用管理命令:
conda env list # 列出所有环境 conda deactivate # 退出当前环境 conda remove -n myproject --all # 删除整个环境 conda list # 列出当前环境的包7.2 把 conda 目录迁到数据盘
系统盘快满了想把~/anaconda3挪到/data/anaconda3,直接mv是不行的,因为环境里很多脚本写死了绝对路径。正确做法有两种:
方法一:用 conda 自带的克隆(推荐,最稳)
conda create -p /data/anaconda3 --clone base然后改.bashrc里的初始化路径,把~/anaconda3全部替换成/data/anaconda3,重开终端验证。
方法二:整体移动后修复
mv ~/anaconda3 /data/anaconda3然后编辑.bashrc改路径,并且要修复每个环境里的硬编码路径。这个方法容易漏,不推荐新手用。
提示:迁移前先
conda env export > environment.yml备份环境定义,万一迁坏了还能重建。
7.3 彻底卸载 Anaconda
不想用了,干净卸载:
conda install anaconda-clean anaconda-clean --yes rm -rf ~/anaconda3然后手动清理~/.bashrc里的 conda initialize 块,删掉~/.condarc、~/.conda、~/.anaconda_backup。重开终端确认which python回到系统 Python。
8. 几个真实踩过的坑和对应解法
8.1 坑一:装完终端启动变慢
.bashrc里 conda 初始化那段每次开终端都要执行,如果 conda 装在慢速磁盘或者网络盘上,终端启动会明显变慢。解法:把auto_activate_base设为 false 能省一点,但初始化本身还在。如果实在慢,可以考虑用conda init --reverse撤销初始化,改成需要时手动source ~/anaconda3/etc/profile.d/conda.sh。
8.2 坑二:SSH 远程登录后 conda 命令找不到
本地终端好好的,SSH 上去conda: command not found。原因是 SSH 非交互式登录不读.bashrc,或者读的是.bash_profile。解法:确认 conda 初始化写在了登录时会读的文件里。可以在~/.bash_profile里加一行source ~/.bashrc,或者把初始化块放到.profile。
8.3 坑三:conda activate在脚本里失效
写 shell 脚本时conda activate报错,因为脚本是非交互 shell。解法:脚本开头加
source ~/anaconda3/etc/profile.d/conda.sh conda activate myproject这样不依赖.bashrc,最可靠。
8.4 坑四:CUDA 版本和 conda 装的 pytorch 对不上
装 pytorch 时conda install pytorch torchvision torchaudio pytorch-cuda=11.7 -c pytorch -c nvidia,装完torch.cuda.is_available()返回 False。多半是驱动版本和 cuda 版本不匹配。先用nvidia-smi看驱动支持的 CUDA 版本,再选对应的 pytorch-cuda 版本。conda 装的 cuda 运行时是环境内的,不依赖系统 CUDA,但依赖驱动。
8.5 坑五:中文输入法在终端里候选框乱跳
这个和 Anaconda 无关,但 Ubuntu 新手常一起遇到。终端里用 fcitx 输入中文,候选框位置飘。解法:换用 fcitx5,或者在终端设置里调整。这个属于系统输入法配置,单独处理。
9. 我个人的使用习惯和最后几句实在话
用了几年下来,我现在的固定做法是:装 Miniconda 而不是完整版,因为完整版里那几百个包我 90% 用不上,反而拖慢环境创建;auto_activate_base永远设 false,保持终端干净;每个项目一个环境,环境名和项目名一致,方便conda env list时一眼认出来;.condarc里配好国内源,conda clean -a定期清缓存。
还有个小技巧:把常用环境的激活写成 alias 放进.bashrc,比如alias ca='conda activate',敲起来快很多。以及conda env export --no-builds > environment.yml导出的环境文件跨平台兼容性更好,换机器重建环境时少踩坑。
Anaconda 这东西,装本身不难,难的是理解它和系统 Python 的边界、理解 conda 的初始化机制。把这两点搞明白,后面用起来就顺了。真遇到报错,先看报错信息里让你run 'conda init'还是command not found,对症下药,基本都能自己解决。