首页 / 资讯中心 / 文章详情

Anaconda 深度学习环境配置全流程:从虚拟环境到 PyTorch 安装避坑指南

Anaconda 深度学习环境配置全流程:从虚拟环境到 PyTorch 安装避坑指南 ★ FEATURED ARTICLE
很多人第一次接触深度学习遇到的第一个坎往往不是某个模型学不会而是环境配不起来。装 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.iniLinux/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.11TensorFlow 2.10 之后的很多新特性要求 Python 3.7 以上。稳妥的做法是查一下你准备安装的框架的官方文档选一个在其支持范围内的 Python 版本。一般来说创建环境时指定一个中等偏新的版本就行比如 Python 3.8 或 3.9。不要一上来直接装个 3.12很多底层库可能还没有对应的 wheel。我自己实践下来Python 3.8 和 3.9 是目前深度学习生态兼容性最好的两个版本。执行创建命令conda create -n dl python3.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-cuda11.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 里按 CtrlShiftP 打开命令面板选择 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每次装完新包就顺手更新一次。等到换机器的时候直接从这个文件恢复省去了很多回忆和排查的时间。希望你也能绕过那些我踩过的坑花最少的时间把环境搞定把精力留给真正有意思的实验。
阅读完成 · 觉得有帮助?
咨询建站