很多人第一次接触深度学习,遇到的第一个坎往往不是某个模型学不会,而是环境配不起来。装 TensorFlow 报错,装 PyTorch 冲突,pip 装了一堆包之后系统 Python 彻底乱掉。这些问题我太熟悉了,前前后后帮不少同学排查过环境问题之后,我越来越觉得 Anaconda 是新手最值得先花一小时搞明白的工具。
Anaconda 说白了是一个 Python 发行版加包管理器,但它的核心价值在于 conda 提供的虚拟环境隔离机制。你可以在电脑上同时存在多个互不干扰的 Python 环境,一个跑 PyTorch 1.x,一个跑 PyTorch 2.x,甚至一个用 Python 3.8、一个用 Python 3.11,互不影响。这篇内容就围绕 Anaconda 配置的完整流程展开,覆盖从安装、初始化、镜像源配置、虚拟环境创建、深度学习框架安装到日常管理、问题排查的每一个环节。
文章适合刚接触深度学习、打算在本机跑训练任务的新手,也适合那些被环境问题折腾到想放弃的老手。认真跟着走一遍,后面遇到的 90% 环境问题基本都能自己解决。
1. 为什么环境管理是深度学习的第一道门槛
1.1 pip 装包一时爽,依赖冲突火葬场
先讲一个真实场景。某位同学想跑一个图像分类的 Demo,按照教程用 pip 安装了 TensorFlow,然后又装了一个自然语言处理的库,结果那个库要求 NumPy 版本不能高于 1.19,而 TensorFlow 非要 1.24 以上。pip 强行装上去之后,import 报错、库之间互相踩,最后只能重装系统 Python。这就是典型的依赖地狱。
深度学习生态里的依赖关系比普通 Web 开发敏感得多。框架版本、CUDA 版本、cuDNN 版本、Python 版本、NumPy 版本之间有着极度微妙的兼容矩阵。同一个机器上如果想同时跑几个不同时期写的项目,几乎必然遇到版本冲突。而 Anaconda 的虚拟环境,本质上就是给你准备了一排独立的小盒子,每个盒子里装着一套完整的、互不干扰的 Python 依赖链。
1.2 虚拟环境到底做了什么
conda 创建环境的时候,不是简简单单装几个包,而是把 Python 解释器本身、pip、setuptools 等基础工具一起装进一个独立目录。你的所有项目文件如果主动引用了某个环境的解释器,那这个项目跑起来用的就是那套完整的依赖组合。
拿 Windows 举例,conda 默认会把环境放在当前用户目录的 .conda\envs\ 下。每个环境都有自己的 python.exe、Lib、Scripts 目录。Linux 下一般放在安装目录的 envs 文件夹中。激活环境后,命令行里的 python、pip 指向的就是这个环境里的可执行文件,不再是系统全局那套。
我第一次理解这个逻辑的时候,觉得这和 Docker 的思路有点像,只不过 Docker 隔离的是整个操作系统层面,而 conda 隔离的是 Python 运行时和包依赖。对深度学习的日常开发来说,这样轻量级的隔离已经完全够用了。
1.3 为什么是 conda 而不是裸 pip
很多人问,我直接用 pip 加 venv 不行吗?当然可以,但我个人建议新手首选 conda,原因有几个。
第一,conda 不只是管 Python 包,它还管 CUDA、cuDNN、MKL 这类底层二进制库,pip 对这些非 Python 组件的管理能力基本为零。第二,conda 在解决依赖冲突时用的是 SAT 求解器,会尽量找一组兼容的包版本,比 pip 的逐个安装、遇到冲突就报错要智能不少。第三,conda 环境和基础环境的切换只需要一行命令,比手动改 PATH 或者每次都敲一长串虚拟环境的路径方便太多。
有同学会担心 conda 装包速度慢,这个确实存在,尤其是装大型框架的时候。但结合后面讲的镜像源配置,这个问题基本可以消除。
2. Anaconda 安装与初始配置
2.1 下载与安装
去官网下载对应你操作系统的 Anaconda 安装包。下载的时候注意区分架构,Windows 有 64 位和 32 位,现在绝大部分机器都是 64 位,直接选 64 位即可。macOS 这边要注意的坑比较多,Intel 芯片和 Apple Silicon 芯片要下载不同的包,而且 Apple Silicon 上部分深度学习框架还在适配中,安装前最好先确认你要用的框架支持情况。
安装过程没什么难度,但有三个点要特别注意。
一是安装路径不要有中文和空格。我之前见过装到带空格的路径下面的,后续很多命令行工具做路径解析时会出问题。二是 Windows 安装时要勾选注册 Anaconda 为默认 Python 环境,这个选项决定了后面你在命令行直接敲 python 能不能正确调用 conda 环境,我建议勾上。三是安装完成后记得关掉并重新打开命令行窗口,否则 conda 命令不会被系统识别。
2.2 验证安装与 conda 初始化
装好之后,打开命令行终端,依次执行下面几条命令验证:
conda --version如果能看到版本号,说明安装成功。再试一下:
python --version看看默认 Python 版本是不是 Anaconda 自带的那个。如果已经显示了对应版本自带的 Python,说明 PATH 配置正常。如果 conda 命令找不到,关掉窗口重新打开,仍然不行的话去系统环境变量里把 Anaconda 的 Scripts 目录手动加进去。
Linux 环境下安装完之后,需要执行 source ~/.bashrc 或者重新登录终端,让 conda 初始化脚本生效。新版 Anaconda 安装时会自动执行 conda init,安装完成后务必确认 shell 里有没有提示符 (base)。base 就是 conda 创建的第一个默认环境,后面我们一般不直接在 base 里装深度学习框架,而是新建专属环境。
2.3 配置国内镜像源
这一步极其重要,也是很多人绕不开的坑。conda 默认从官方源下载包,在国内网络环境下速度非常不稳定,几十 MB 的包都可能下载个把小时。配置国内开源镜像站之后,速度会提升几个量级。在命令行执行:
conda config --add channels https://mirrors.example.edu.cn/anaconda/pkgs/main conda config --add channels https://mirrors.example.edu.cn/anaconda/pkgs/free conda config --set show_channel_urls yes这里镜像站地址请替换成你信任的国内开源镜像站即可。配完之后可以执行 conda config --show channels 查看当前 channel 配置,确认镜像源已经生效。show_channel_urls 设置为 yes 的目的是在安装包时显示来源,方便排查问题。
这里必须提醒一句:不要在 channel 优先级上乱加东西。我以前为了装某些包加过 conda-forge,结果后续装包时依赖解析慢到怀疑人生。conda 会先尝试从优先级最高的 channel 找包,找不到再降级去下一个。推荐的方案是:默认用官方源、加一个国内镜像、遇到官方源没有的包再临时指定 conda-forge。
2.4 pip 同样需要加速
conda 配置好只是第一步,后面安装某些只存在于 pip 上的包时,pip 还是会走官方 PyPI,国外源在国内下载同样慢。所以也建议把 pip 的默认索引换成国内镜像。
在用户目录下创建或修改 pip 配置文件,Windows 下是 %HOMEPATH%\pip\pip.ini,Linux/macOS 下是 ~/.pip/pip.conf,写入:
[global] index-url = https://pypi.example.edu.cn/simple trusted-host = pypi.example.edu.cn把地址替换成你选择的国内 PyPI 镜像即可。配置完之后,pip install 的速度会有非常明显的提升。这个配置文件是全局生效的,对个人电脑来说是最省心的做法。
3. 创建与配置深度学习虚拟环境
3.1 确定 Python 版本与基础包
创建环境之前,先想清楚你需要的 Python 版本。不同深度学习框架对 Python 版本有要求,比如 PyTorch 在某个版本的官方安装命令会标明支持 Python 3.8 到 3.11,TensorFlow 2.10 之后的很多新特性要求 Python 3.7 以上。稳妥的做法是查一下你准备安装的框架的官方文档,选一个在其支持范围内的 Python 版本。
一般来说,创建环境时指定一个中等偏新的版本就行,比如 Python 3.8 或 3.9。不要一上来直接装个 3.12,很多底层库可能还没有对应的 wheel。我自己实践下来,Python 3.8 和 3.9 是目前深度学习生态兼容性最好的两个版本。
执行创建命令:
conda create -n dl python=3.9这条命令会创建一个名为 dl 的环境,并且安装指定版本的 Python。命令执行过程中,conda 会先做依赖解析,然后展示要安装的包列表,确认后开始下载安装。等待时间取决于网络状况,一般几分钟之内完成。
3.2 激活环境与安装基础依赖
环境创建好之后,用以下命令激活:
conda activate dl激活后命令行提示符会变成 (dl) 开头,这表示你当前处于 dl 环境。Windows 系统如果提示需要先执行 conda init,就按前面说的初始化方式处理。Linux/macOS 在旧版本中需要用 source activate dl,新版本建议统一使用 conda activate p 规范。
激活后,先安装一些后面几乎必用的基础工具。ipython 比默认的 python 交互式体验好太多,jupyter 是跑 Notebook 的必备工具:
pip install ipython jupyter这里推荐在 conda 环境里混合使用 pip 没问题,但有个原则:能用 conda 装的就用 conda 装,conda 没有的再用 pip。如果先用 pip 装了一堆包,之后用 conda 安装某个依赖库时可能会因为版本不匹配需要重新解析,导致环境变动。混合使用时,保持 conda 装底层、pip 装上层的顺序,问题会少很多。
3.3 安装深度学习框架
接下来就是安装核心框架。以 PyTorch 为例,打开官网首页,它会根据你选择的系统、包管理器、CUDA 版本自动生成安装命令。选择 CUDA 11.8 版,命令形如:
conda install pytorch torchvision torchaudio pytorch-cuda=11.8 -c pytorch -c nvidia这里注意,官网默认给的命令很多带 -c pytorch 参数,含义是优先从官方自己的 channel 拉取,速度可能不稳定。在国内网络环境下,如果速度过慢,可以去掉 -c pytorch,让 conda 从已配置的国内镜像源拉取,但前提是确认镜像源上有你要的版本。
如果你需要 GPU 训练,还要提前装好显卡驱动和 CUDA 工具包。显卡驱动和 CUDA 版本有对应关系,框架安装文档会标明支持哪些 CUDA 版本。驱动版本太老,或者 CUDA 版本和框架不匹配,最常见的问题就是 import 框架时报错找不到 CUDA 库,或者调用 GPU 检测函数返回 False。
3.4 验证环境是否可用
框架装完之后,验证环境是否正常是必不可少的一步。以 PyTorch 为例:
python -c "import torch; print(torch.__version__); print(torch.cuda.is_available())"如果输出 True,说明 GPU 可用。如果输出 False,依次排查:显卡驱动是否装好、CUDA 版本是否被框架支持、conda 环境是否无意中装了两个版本的 CUDA。我见过一种很隐蔽的情况:有人在 base 环境里装了某个版本的 CUDA,在 dl 环境里又装了一个,两个环境之间互相干扰导致的误判。
4. 环境管理的日常操作与进阶技巧
4.1 查看与管理环境
日常使用久了,你很快会发现自己需要管理多个环境。常用命令如下:
conda env list查看当前有的所有环境,带星号的是当前激活的环境。conda list 查看当前环境装的所有包。删除不需要的环境用:
conda env remove -n 环境名复制一个环境用于测试:
conda create -n 新环境名 --clone 老环境名这个命令在需要给不同项目准备独立环境时非常有用。比如一个环境用来跑稳定版项目,另一个环境用来尝试最新版框架,两者井水不犯河水。
4.2 环境导出与复现
想把自己配好的环境分享给别人,或者换一台机器复现,最规范的做法是导出环境配置:
conda env export > environment.yml这个文件会把当前环境里所有包的版本、渠道信息都记录下来,包括 pip 安装的包。别人拿到这个文件后,执行:
conda env create -f environment.yml就能重建一模一样的开发环境。
不过要提醒一点:导出的 yml 里包含本地路径信息,发给别人之前最好检查一下。如果只是需要记录顶层依赖,不包含传递依赖,可以用 conda env export --from-history,它只会导出你手动用 conda install 或 create 指定的包,这样文件更简洁,重建时可解析的空间也更大。
4.3 环境清理与磁盘占用
Anaconda 用久了,磁盘占用会非常恐怖。conda 缓存目录里存着所有下载过的安装包,动辄几个 GB。清理命令:
conda clean --all它会清理过期缓存和无用索引。在删除环境时,如果缓存里还有这个环境的下载包,conda 不会自动删除,所以定期执行 conda clean --all 是保持磁盘健康的重要手段。
另外,环境也不要建得太多,每个环境装一个完整的深度学习框架,占用都在 3GB 以上。我见过有人电脑上有二十多个环境,很多只是试了一两个包就再也不用了。定期清理掉不用的环境,对日常使用体验有非常明显的改善。
4.4 与 IDE 的联动技巧
环境配好之后,关键一步是把 IDE 指向正确的解释器。VSCode 里按 Ctrl+Shift+P 打开命令面板,选择 Python: Select Interpreter,就能看到 conda 创建的所有环境,选择你要用的那个即可。PyCharm 则在设置里配置项目解释器。
这一步经常被忽略。在终端里明明能 import 的包,在 IDE 里却报 ModuleNotFoundError,十有八九就是解释器没选对。
5. 常见问题排查与避坑心得
5.1 conda 命令找不到或激活失败
新装的 conda 偶尔会遇到命令在重新打开终端后依然找不到的情况。Windows 的解决思路是把 Anaconda 的 Scripts 目录加到系统 PATH。Linux 下则检查 shell 配置文件里有没有 conda init 写入的初始化代码。
还有一种情况是装了多个 Python 环境,命令行里 python 被全局 Python 覆盖了,这时候要确认 PATH 中 Anaconda 相关目录排在全局 Python 目录之前。
5.2 包安装速度极慢或超时
镜像源配置了还是慢,建议先排查是不是同时配置了多个冲突的 channel。执行:
conda config --show channels查看当前 channel 列表。如果发现同时存在官方源和多个镜像源,且优先级混乱,直接执行 conda config --remove-key channels 清除所有配置,再从干净状态重新添加。与其花大量时间等待超时,不如一次性把源配置彻底搞定。
5.3 提示 conda 与 pip 包冲突
很多人在装深度学习框架之前先用 pip 装了 NumPy,后来用 conda 安装 PyTorch 时,conda 需要升级或降级 NumPy,可能会提示当前环境下的包与 pip 安装的包冲突。最稳妥的方案是:创建环境后,先用 conda 装完所有底层依赖,再用 pip 安装 PyPI 特有的包。如果已经冲突了,简单粗暴的办法是重建环境,按正确顺序重新装一遍。
5.4 环境丢了或者找不到
如果你发现之前创建的环境突然不见了,先检查是不是用了其他终端工具,比如 Windows 上 Git Bash 和 CMD 读取的路径可能存在差异。conda env list 显示的环境,是基于安装目录下 envs 文件夹扫描得到的,如果这个文件夹被移动了或者权限不足,conda 就会看不到。
这种时候重新执行 conda info 检查环境路径,或者干脆用绝对路径调用环境里的 python 可执行文件。
5.5 关于 cuDNN 与 CUDA 的常见矛盾
安装框架时如果直接使用了官方给的包含 cuDNN 的安装命令,你可能会同时装了一个本地可用的 cuDNN 版本,和系统里已有的 CUDA 版本不一致。这种情况下,框架仍然能用,因为框架内部打包了自己适配的 CUDA 运行库。但如果你后续又装了其他依赖 cuDNN 的包,就很有可能出现动态链接库冲突。
我的建议是,深度学习框架层面优先直接用框架自带的 CUDA 依赖,系统层面只负责装显卡驱动和匹配的 CUDA 工具包,别重复折腾。
6. 折腾完环境之后,我想多说两句
这一路走下来,我最大的体会是:深度学习环境配置这件事,看起来琐碎,但其实每一步都有它存在的道理。你花一个小时把 Anaconda 配置琢磨明白,后面每一次换项目、换框架、换机器,都是这个流程的重复,熟练之后十分钟就能搞定一个干净环境。
最后再分享一个小技巧:我习惯在自己常用的环境里放一个 requirements.txt,每次装完新包就顺手更新一次。等到换机器的时候直接从这个文件恢复,省去了很多回忆和排查的时间。希望你也能绕过那些我踩过的坑,花最少的时间把环境搞定,把精力留给真正有意思的实验。