1. 为什么在 Linux 上折腾 Anaconda 环境管理
先说我自己的经历。早些年我在服务器上跑 Python 脚本,习惯直接用系统自带的 Python 3.6,后来项目越来越多,有的要 TensorFlow,有的要 PyTorch,还有一个老项目死活只兼容 Python 3.7。系统 Python 版本不能乱动,项目之间的依赖还互相打架,那段时间最常干的事就是 pip install 装完了,再 pip uninstall 卸载重装,一天能折腾好几个来回。后来换了 Anaconda,这个问题才算彻底解决。
Anaconda 本质上是一个 Python 发行版加包管理器,底层靠 conda 来管理环境和依赖。它和直接装 Python 最大的区别在于:conda 不只管 Python 包,还管 Python 解释器本身的版本,甚至连 CUDA 驱动之外的很多二进制依赖也能一起管。你在 Linux 上装 Anaconda,相当于给自己建立了一个完全独立的软件生态,项目之间用虚拟环境隔开,互不干扰,想换 Python 版本随时能建一个新环境,不需要动系统自带的解释器。
这篇文章面向的人群很明确:要在 Linux 服务器、开发机或者国产 Linux 发行版(比如麒麟 V10)上做 Python 开发、跑深度学习、部署脚本的人。我主要讲环境管理的完整链路,从安装、初始化、创建虚拟环境、配置镜像源到常见报错排查,每步都会解释为什么这么操作,而不是单纯扔一堆命令让你复制。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 安装 Anaconda 前需要想清楚的几件事
2.1 Miniconda 还是 Anaconda,别选错
很多新手下载的时候会纠结:直接下载 Anaconda 还是 Miniconda?我的建议是:除非你完全不想折腾,就想开箱即用,否则优先选 Miniconda。
Anaconda 大而全,自带 250 多个常用科学计算包,安装包体积在 500MB 以上,装完占用好几个 GB。Miniconda 只有一个小巧的 conda 和 Python,核心安装包 80MB 左右,装完也就几百 MB,需要什么包再自己 conda install 就行。在服务器上,磁盘空间和网络带宽本身就宝贵,我见过不少人在云服务器上装了 Anaconda,结果 root 分区直接被撑爆,教训相当深刻。
从环境管理的角度看,Anaconda 和 Miniconda 的命令完全一致,底层机制一样,只是预装包数量不同。也就是说,你用了 Miniconda,后期照样能通过 conda 命令把那些常用科学计算包装回来,只是需要多输入几条命令而已。
| 对比项 | Anaconda | Miniconda |
|---|---|---|
| 安装包体积 | 500MB+ | 80MB 左右 |
| 预装软件包 | 250+ 常用包 | 仅 conda、Python、pip |
| 磁盘占用 | 数 GB | 几百 MB |
| 适合场景 | 本地快速开箱、教学环境 | 服务器、容器、嵌入式构建 |
| 环境管理命令 | 与 Miniconda 完全一致 | 与 Anaconda 完全一致 |
2.2 确定安装位置和安装用户
安装到哪个目录,是个容易被忽略但影响很大的决定。默认情况下 Anaconda 会安装到当前用户的 home 目录,比如 /home/你的用户名/anaconda3。这样做的好处是无需 root 权限,普通用户自己就能完成安装和包管理,也不会干扰系统全局的 Python。
但如果你在一台多人共用的服务器上,希望所有人都能直接使用同一个 conda 环境,那就应考虑安装到 /opt/anaconda3 这种系统级目录,并给相关用户配置好 PATH 和权限。不过说实话,我一般不推荐在共享服务器上搞全局的 Anaconda,因为用户权限、环境变量、包冲突的问题会非常烦人。更好的方案是每个用户各自安装自己的 Miniconda,各管各的环境,互不干扰。
还有一点要提醒:如果系统里已经装了 Python,安装 Anaconda 不会去修改系统原来的 Python。conda 初始化时会把 Anaconda 的 bin 目录加进 PATH,而且默认放在最前面,这样你在终端敲 python 的时候,优先执行的是 Anaconda 环境里的 Python,而不是 /usr/bin/python。
3. 从零开始安装 Anaconda 环境
3.1 下载安装包并校验完整性
首先到 Anaconda 官网的下载页或者清华大学开源软件镜像站拿到对应 Linux 版本的安装脚本。国内访问官网经常慢得让人抓狂,用清华镜像会快很多。下载的时候注意架构,x86_64 对应绝大多数 Intel 和 AMD 服务器,ARM64 对应鲲鹏、飞腾这类国产处理器环境。
bash复制wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-2024.10-1-Linux-x86_64.sh
下载完成后,建议先查看一下文件大小是否正常,再用 SHA256 校验安装包完整性。官方页面会提供对应的校验值,你可以用 sha256sum 比对:
bash复制sha256sum Anaconda3-2024.10-1-Linux-x86_64.sh
这一步不是浪费时间。我遇到过网络中断导致安装包不完整的情况,直接执行安装脚本会报各种莫名其妙的语法错误,排查半天才发现是包坏了。先校验,后面能省很多事。
3.2 执行安装脚本和初始化配置
安装脚本是 bash 写的,直接执行即可:
bash复制bash Anaconda3-2024.10-1-Linux-x86_64.sh
安装过程会询问你是否同意许可协议,输入 yes 回车即可。接着会提示安装路径,默认是 /root/anaconda3 或者 /home/用户名/anaconda3,直接回车用默认路径,或者手动改成你想要的路径,例如:
code复制[/root/anaconda3] >>> /data/anaconda3
到最后一步,安装程序会问是否运行 conda init 来初始化 shell 环境。这里一定要选 yes。conda init 会在 ~/.bashrc 里写入初始化代码,之后每次打开终端都会自动加载 conda 命令。如果你选 no,那之后每次使用 conda 都得手动 source /path/to/anaconda3/etc/profile.d/conda.sh,非常麻烦。
安装完成后,重新加载 shell 配置:
bash复制source ~/.bashrc
然后验证一下:
bash复制conda --version
which python
python --version
正常情况下,conda --version 会显示版本号,which python 应该指向你刚安装的 Anaconda 目录下的 python,比如 /data/anaconda3/bin/python。
3.3 环境变量配置的底层原理
为什么安装完要 source ~/.bashrc?因为 conda init 实际上就是在你的 shell 配置文件中追加了一段脚本,定义了一个名为 conda 的 shell 函数,并把 Anaconda 的 bin 目录添加到 PATH 中。追加的内容大致长这样:
bash复制# >>> conda initialize >>>
# !! Contents within this block are managed by 'conda init' !!
__conda_setup="$('/data/anaconda3/bin/conda' 'shell.bash' 'hook' 2> /dev/null)"
if [ $? -eq 0 ]; then
eval "$__conda_setup"
else
if [ -f "/data/anaconda3/etc/profile.d/conda.sh" ]; then
. "/data/anaconda3/etc/profile.d/conda.sh"
else
export PATH="/data/anaconda3/bin:$PATH"
fi
fi
unset __conda_setup
# <<< conda initialize <<<
理解这段代码对你排查问题是至关重要的。很多人手动改 ~/.bashrc 添加 export PATH=...,却发现 conda 命令有时候能用有时候不能用,大概率就是和这段初始化代码冲突了。你需要确保 Anaconda 的 bin 目录在 PATH 最前面,而不是被 /usr/bin 拦截。
如果你用的是 zsh,对应的配置是 ~/.zshrc,conda init 默认也会识别当前 shell 并写入对应文件。conda init --help 可以查看支持的 shell 列表。
4. 环境管理的核心操作与实战经验
4.1 创建虚拟环境:让项目依赖彻底隔离
虚拟环境是 conda 最核心的价值,没有之一。它相当于在你的 Linux 系统里开出多个互相隔离的“小房间”,每个房间里都有自己独立的 Python 解释器、包目录和可执行文件。你在这个房间里装什么包,都不影响其他房间。
创建环境的基本命令是:
bash复制conda create -n 环境名 python=3.10
-n 后面的名字可以随便起,建议用项目名,比如 nlp、train、webapi 这种有明确含义的名字。python=3.10 指定创建环境时安装的 Python 版本。这一点是 conda 最强大的地方:你完全可以创建一个 Python 3.6 的老环境,同时保留另一个 Python 3.12 的新环境,两者共存,互不干扰。
我创建环境的时候习惯加上 -y 参数,跳过交互确认:
bash复制conda create -n torch2 python=3.10 -y
如果要在创建环境的同时装一些基础包,可以一次性列出来:
bash复制conda create -n py311 python=3.11 numpy pandas scikit-learn -y
创建过程会先解析依赖,然后下载并安装。这时候如果网络不好,可能等很久。建议先配置好镜像源再创建环境,后面专门讲。
4.2 激活、退出和查看环境
环境创建好了,要进入这个环境,靠的是 conda activate:
bash复制conda activate torch2
激活之后,你的 shell 提示符会变成 (torch2) 用户名@主机名:~$ 这种形式,同时 which python 也会指向这个环境下的解释器,比如 /home/用户名/anaconda3/envs/torch2/bin/python。这意味着你输入 pip、python,操作的都是这个环境里的版本,不会误动 base 环境。
退出当前环境:
bash复制conda deactivate
查看本机上已经创建的所有环境:
bash复制conda env list
输出类似这样:
code复制# conda environments:
#
base * /home/lin/anaconda3
torch2 /home/lin/anaconda3/envs/torch2
nlp /home/lin/anaconda3/envs/nlp
带星号 * 表示当前处于激活状态的环境。这里有个容易踩坑的点:如果你只是 conda list,它默认列出当前环境的包;要查看某个特定环境下装了哪些包,可以指定环境名:
bash复制conda list -n torch2
为什么强调这点?因为我在实际运维中见过不少同事,明明环境已经创建了,结果在 base 环境里拼命 pip install,然后跑项目的时候各种依赖冲突,查了半天才发现装错房间了。
4.3 克隆、导出和删除环境
环境管理不只是创建和激活。当你想复制一个现有环境的依赖,给同事或者另一台机器用,可以克隆环境:
bash复制conda create -n newenv --clone oldenv
这会在本地生成一个和旧环境几乎完全一样的新环境,非常适合做环境备份。如果只是想把依赖清单导出来,用:
bash复制conda activate torch2
conda env export > environment.yml
这个 environment.yml 文件记录了这个环境里的所有包和版本号,以及包的来源通道。拿到另外一台机器上,执行:
bash复制conda env create -f environment.yml
就能恢复出一个相同的环境。注意,conda env export 导出的文件可能包含当前系统的绝对路径和平台信息,跨平台迁移时不一定完全通用。如果只是导出 Python 包层面的依赖,可以用 pip freeze 生成 requirements.txt:
bash复制pip freeze > requirements.txt
删除环境同样很简单:
bash复制conda env remove -n 环境名
删除之前确认这个环境已经不需要了,因为这是不可逆操作,环境和里面所有包都会被删掉。
4.4 一个标准的项目实践流程
我把我平时在 Linux 服务器上跑深度学习项目的流程写下来,大家可以直接抄作业:
bash复制# 1. 创建独立环境
conda create -n torch2 python=3.10 -y
# 2. 激活环境
conda activate torch2
# 3. 安装必要的包,比如 PyTorch
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
# 4. 安装其他依赖
pip install numpy pandas jupyter matplotlib
# 5. 跑代码之前确认环境正确
which python
python --version
这套流程的好处是,不管系统里有多少个项目,每个项目都有自己独立的依赖,升级某个包不会导致其他项目挂掉。
5. 包管理与镜像源配置,解决 404 报错
5.1 conda install 与 pip install 怎么选
在 Anaconda 环境里,你可以同时使用 conda 和 pip 安装包。很多新手搞不清两者的区别。简单说:conda 是一个跨语言的包管理器,不光能装 Python 包,还能装非 Python 的二进制库,比如 CUDA、OpenBLAS、MKL 这些底层依赖;pip 则主要用于 Python 包,依赖的二进制库不一定给你带。
实际使用中,我遵循一个规律:优先用 conda 安装,conda 没有的包再用 pip。
bash复制# conda 安装
conda install numpy pandas matplotlib
# 找不到或版本太老,用 pip
pip install some-new-package
但是混用 conda 和 pip 有一个要注意的问题:如果你先用 conda 装了很多包,再用 pip 装另一个包,可能把已有包的依赖关系打乱。具体表现是:环境里出现相同包的两个版本,或者 import 时出现无法解释的错误。我的建议是,在一个环境里尽可能先统一用 pip 或者先统一用 conda,至少每个阶段要集中操作,不要两个命令来回交替铺满整个环境。
5.2 配置国内镜像源,避开 conda 404
使用 conda 安装包时,默认走的源是 repo.anaconda.com,国内访问速度极慢,甚至经常超时。而且在国内某些网络环境里,访问 https://repo.anaconda.com/pkgs/main 或 pkgs/free 会返回 404 或者连接被重置,这就是很经典的问题:UnavailableInvalidChannel: HTTP 404 NOT FOUND for channel anaconda/pkgs/msys。
解决办法很简单,把 conda 的默认通道换成清华大学的镜像源。清华镜像提供了 Anaconda 的完整仓库,包括 main、free、msys2 等子通道。配置方式如下:
bash复制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/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2/
conda config --set show_channel_urls yes
这里每次 --add channels 会把新的通道添加到 .condarc 文件的 channels 列表前面。所以上面的执行顺序实际上是让 msys2 排在最前面,free 其次,main 最后。如果你希望优先级是 main 最高,可以把顺序反过来,或者直接编辑 ~/.condarc 文件。配置完成后可以查看:
bash复制cat ~/.condarc
你会看到类似下面的内容:
yaml复制channels:
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2/
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
show_channel_urls: true
需要注意的是,有些资料会让你配置 defaults 通道,然后通过写 default_channels 来替换,这种配置方式也能用,但相对繁琐。更直接的方式就是在 channels 下写明镜像地址,然后把默认的 defaults 移除。
配置好镜像源之后,还要清除一下缓存的索引:
bash复制conda clean -i -y
再执行:
bash复制conda update --all
会明显感觉到下载速度的变化。
5.3 针对 404 的深入排查思路
遇到 UnavailableInvalidChannel: HTTP 404 NOT FOUND for channel anaconda/pkgs/msys 这类报错,除了直接改镜像源,还要看是不是因为某个 channel 路径本身就不存在。这个 msys2 通道在 Linux 下并不常用,有些旧版 conda 会把 pkgs/free 和 pkgs/msys2 默认加进配置,但镜像源不一定完整覆盖。
排查步骤可以这样来:
bash复制# 查看当前配置
conda config --show channels
# 直接测试某个通道地址是否可达
curl -I https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2/
如果响应头是 200,说明地址有效,大概率是 conda 的配置文件里残留了错误条目。用 conda config --remove channels 通道地址 把无效通道移除即可。
如果报错中还提到 link 阶段失败,比如 Unable to repodata for anaconda/pkgs/free,那也要看 ~/.condarc 里有没有老旧的 anaconda.org 地址残留。把所有 channels 全部换成国内镜像地址就能解决大部分问题。
6. Linux 环境下的 Anaconda 实战细节
6.1 在国产 Linux 发行版上安装的注意事项
越来越多人在国产 Linux 发行版上工作,比如银河麒麟 V10、统信 UOS 这些。这些系统大部分基于 Debian 或 CentOS 改造,所以 Anaconda 在它们上面安装基本兼容,但有几个坑值得提前避。
第一,确认系统架构。麒麟 V10 有 x86_64 版本,也有 ARM64 版本。下载 Anaconda 安装包时一定要选对应架构的版本,ARM 平台不能直接跑 x86_64 的安装脚本。我见过有人硬着头皮在 ARM 机器上执行 x86_64 安装包,结果全是 Exec format error。
第二,注意系统自带的 Python。有些国产 Linux 发行版对系统级 Python 版本有严格依赖,比如系统工具可能依赖 /usr/bin/python3。Anaconda 安装后不能随意把系统 Python 替换掉,也不建议你手动把 Anaconda 的 bin 目录加入 /etc/profile 这种全局配置文件。正确的做法是每个用户在自己 ~/.bashrc 里通过 conda init 初始化,只影响当前用户。
第三,如果安装过程中提示缺少 libX11 或 libGL 之类的依赖,这是因为 Anaconda 的 GUI 工具集(比如 Jupyter Notebook 的某些扩展)需要图形库支持。服务器上一般不需要这些,用 conda install jupyter-server 之类的方式按需安装即可,不必为图形库单独折腾。
第四,在轻量桌面环境或纯命令行的 Linux 上,安装 Anaconda 后如果终端里出现 conda 命令找不到,很可能是初始化脚本没有写入正确 shell 的配置。用 echo $SHELL 看一下当前 shell 是 bash 还是 zsh,然后确认 ~/.bashrc 或 ~/.zshrc 里是否有 conda initialize 块。如果没有,重新执行:
bash复制conda init bash
6.2 与 PyCharm 集成配置
在 Linux 上做 Python 开发,JetBrains PyCharm 是我用最多的 IDE。PyCharm 配置 Anaconda 环境的过程很简单,但不少新手在 Settings -> Project -> Python Interpreter 里找不到 conda 环境,主要原因是没注意要选择正确的解释器路径。
PyCharm 需要配置的解释器,不是 anaconda3 根目录下的 python,而是某个环境下的 python,比如:
bash复制/home/你的用户名/anaconda3/envs/torch2/bin/python
操作步骤:
- 打开 PyCharm,进入
File -> Settings -> Project -> Python Interpreter - 点击右上角的齿轮图标,选择
Add Interpreter - 选择
Conda Environment,然后选择Existing environment - 在
Interpreter路径里选择对应环境的bin/python - 确认后,PyCharm 会自动识别该环境下的所有包
如果你是第一次使用 conda,也可以在 Add Interpreter 里选择 Create new environment,这样 PyCharm 会直接调用 conda 帮你创建一个新环境。这种方式适合项目一开始就明确需要虚拟环境的情况。
配置完成后,在 PyCharm 的终端里执行 conda activate 也能正常切换环境,前提是 PyCharm 的终端设置里勾选了 Activate virtualenv 或者 shell 配置文件已经做好了 conda 初始化。
6.3 让 Jupyter Notebook 识别 conda 环境
如果你在 Linux 上使用 Jupyter,可能遇到这种情况:明明激活了某个 conda 环境,在终端里 import torch 没问题,但 Jupyter 的 kernel 里却提示 ModuleNotFoundError。这是因为 Jupyter 默认使用的 kernel 是启动 jupyter 时那个环境下的 Python,而不是当前激活的环境。
解决办法是在目标 conda 环境里安装 ipykernel,然后把这个环境注册到 Jupyter 里:
bash复制conda activate torch2
conda install ipykernel -y
python -m ipykernel install --user --name=torch2 --display-name "Python (torch2)"
这样 Jupyter 启动后,在 New 菜单里就能看到名为 Python (torch2) 的 kernel,点进去之后 import 的就是 torch2 环境里的包了。
如果之后删掉了这个环境,记得把 Jupyter 里对应的 kernel 也删掉:
bash复制jupyter kernelspec remove torch2
7. 常见问题与排查技巧实录
7.1 问题速查表
这里我整理了一份实际运维中经常遇到的问题和对应处理方式,可以直接对照使用。
| 问题现象 | 根本原因 | 解决办法 |
|---|---|---|
conda: command not found |
conda 未初始化或 PATH 未配置 | 执行 source /路径/anaconda3/etc/profile.d/conda.sh,然后 conda init |
UnavailableInvalidChannel: HTTP 404 |
通道配置了不存在的源 | 编辑 ~/.condarc,移除无效通道,换成清华镜像地址 |
CondaHTTPError: 404 下载包失败 |
镜像源临时故障或路径错误 | 更换其他镜像源,比如阿里云、中科大镜像 |
激活环境时提示 CommandNotFoundError |
当前 shell 没有加载 conda 初始化函数 | 执行 conda init bash 或手动 source conda.sh |
终端提示 WARNING: A conda environment already exists |
重复执行了安装或初始化 | 检查 ~/.bashrc,删除重复的 conda initialize 块 |
which python 还是系统 Python |
Anaconda 的 bin 目录不在 PATH 最前面 | 调整 ~/.bashrc 中 conda init 的位置,确保在 PATH 开头 |
| 安装包时内存不足被 killed | conda 在解析依赖时内存/磁盘占用过高 | 用 conda install --no-update-deps 减少依赖范围,或清理缓存 |
libpython3.10.so.1.0: cannot open shared object file |
二进制库路径问题 | 用 conda install python=3.10 重建环境,或 ldconfig 更新库缓存 |
| 卸载 Anaconda 后系统 Python 被替换 | 之前修改了全局 PATH | 删除 Anaconda 后,重置 PATH,恢复 /usr/bin/python |
7.2 关于激活环境的 Warning
在使用 conda 的早期版本时,我经常遇到这条提示:
code复制CommandNotFoundError: Your shell has not been properly configured to use 'conda activate'.
To initialize your shell, run
$ conda init <shell>
If you already have a shell initialized, regardless of the fact that the shell supports it, to use `conda activate`, please
$ source activate <env>
这个警告的出现场景通常是,你用了新版本的 conda,但 shell 配置里用的还是旧的 source activate 方式,或者干脆没有完成 conda init。解决办法只有两个:
bash复制# 方式一:正确初始化当前 shell
conda init bash
source ~/.bashrc
# 方式二:如果确实不想改 shell 配置,每次手动 source
source /路径/to/anaconda3/etc/profile.d/conda.sh
conda activate 环境名
我强烈推荐方式一。手动 source 虽然也能用,但只要换一个终端窗口或者重启服务器,一切回归原样,排查时很容易让人怀疑人生。
7.3 彻底卸载 Anaconda 的正确姿势
有些读者问,Anaconda 装得不满意,怎么卸载干净?如果直接 rm -rf /opt/anaconda3,表面上删掉了软件目录,但 ~/.bashrc 里还残留着 conda 初始化代码,可能会导致每次打开终端都报 bash: conda: command not found。
正确的卸载步骤是:
bash复制# 1. 先移除所有 conda 环境(可选,如果磁盘空间紧张)
conda info --envs
conda env list
# 2. 删除 ~/.conda 和 ~/.condarc 配置文件
rm -rf ~/.conda ~/.condarc
# 3. 删除 ~/.bashrc 中 conda initialize 块
# 直接编辑文件,把 # >>> conda initialize >>> 到 # <<< conda initialize <<< 之间的内容删掉
# 4. 最后再删除安装目录
rm -rf /路径/to/anaconda3
如果你在 ~/.bashrc 里手动添加过 export PATH="/你的路径/anaconda3/bin:$PATH",记得一并删除。删除后重新 source ~/.bashrc,python 就会回到系统自带版本。
7.4 环境变量设置的经验补充
关于 Linux 环境变量,很多人以为设置 PATH 就是写一行 export PATH=xxx 完事。但实际配置 Anaconda 后,你会发现 ~/.bashrc 里可能同时存在多段和 conda 相关的代码。除初始化代码外,你可能还需要设置一些其他环境变量,比如:
bash复制# 设置 conda 默认不自动激活 base 环境
conda config --set auto_activate_base false
# 添加 conda 软件包的缓存目录(可选)
export CONDARC=~/.condarc
把 auto_activate_base 设为 false 是我个人非常推荐的操作。默认情况下,打开终端就会自动进入 base 环境,这对使用 alias、shell 脚本、或者被多个项目环境切换来说,经常会造成困扰。设置为 false 后,终端启动时不会自动激活任何环境,你需要手动 conda activate,更可控。
8. 关于 conda 环境管理的一些个人心得
8.1 环境命名和整理的纪律
这部分不是命令,但我觉得比命令更重要。在 Linux 上使用 Anaconda,最大的好处是环境隔离,但这个好处的前提是你得有纪律地管理环境。我见过有人在服务器上创建了十几个环境,名字都是 test、test2、final、final_final,等到项目交接的时候完全分不清哪个环境对应哪个项目。
我自己的惯例是:环境名和项目目录名保持一致,并且在环境名里带上日期或者版本号,比如 nlp_202504、recsys_v2。每次创建环境后,在项目目录里放一个 environment.yml,记录当前环境的依赖,这样哪怕服务器换了一台,也能快速恢复。
8.2 conda 源和 pip 源可以统一配置
配置 conda 镜像源的时候,别忘了一起配置 pip 的镜像源。很多人在 conda 里装了包,又用 pip 装包,结果 pip 走的还是默认的 PyPI 官方源,下载速度同样感人。pip 的全局配置在 ~/.pip/pip.conf 或 $HOME/.config/pip/pip.conf,我一般这样写:
bash复制mkdir -p ~/.pip
cat > ~/.pip/pip.conf <<EOF
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
trusted-host = pypi.tuna.tsinghua.edu.cn
EOF
这样无论 conda 还是 pip,下载速度都稳定在一个可以接受的范围。
8.3 遇到网络波动,先看 conda 缓存
conda 在安装包时会缓存下载的 tar.bz2 或 conda 包到 pkgs 目录。如果网络不好,重新安装同一个包的时候,它往往会直接命中缓存,速度比想象中快。但缓存也会带来问题:缓存损坏或与远程源不一致时,会出现莫名其妙校验失败。此时可以直接清缓存:
bash复制conda clean --all -y
这条命令会清理所有缓存的包和索引,下次安装时会强制重新下载。注意,清理缓存不会影响已安装的环境,只是删除下载源文件,所以可以放心执行。
8.4 最后一个细节:定时执行 conda update
我遇到不少用户,Anaconda 装完就再也没更新过,直到某天安装一个比较新的包,报出 conda 版本过低的错误。conda 本身更新迭代不算慢,建议每隔一段时间执行一次:
bash复制conda update conda -n base
仅更新 conda 本身,不用每次都去更新所有环境里的包。因为频繁更新环境里的包,反而可能导致依赖关系不稳定,尤其是跑深度学习的项目,一个 PyTorch 小版本升级都可能带来行为变化。掌握一个原则:基础工具及时更新,业务依赖按需更新。
实际用了这几年,我对 Anaconda 环境管理最大的感受就是:它把原本混乱的 Python 依赖问题变成了一个可预期、可复现的流程。只要掌握创建环境、激活环境、管理包、配置文件源这几个核心操作,不管是本机开发还是服务器部署,都能少踩很多坑。最后再给大家一个建议:在新环境建立初期,先把镜像源和 pip 源配好,再把常用命令写进笔记,后面能省下大量折腾时间。
