刚接触 PyTorch 和深度学习的时候,我猜绝大多数人都不是被模型结构劝退的,而是被开发环境的配置问题卡到怀疑人生。Python 版本不对、包冲突、装好的 PyTorch 用不了 CUDA、电脑是集显不知道怎么选安装命令……这些坑我当年是一个没落下全踩过。所以这篇笔记,我打算把“Python 环境管理”这件事一次性讲透,包含集显电脑安装 PyTorch 的完整实操流程,适合零基础的深度学习入门者、被环境配置折磨的初学者,以及想系统捋一遍 conda 用法的朋友。
先说结论:深度学习项目开发,环境管理的基本功比模型调参更影响学习效率。一个干净可控的 Python 环境,能让你在复现项目、切换 PyTorch 版本、跑通别人的开源代码时省下大量的时间。这篇文章不整虚的,从最底层的 Python 和 conda 的关系讲起,再一步步带你建好虚拟环境、装好 CPU 版 PyTorch,最后还会附上我实际踩过的坑和一些排查技巧。
1. 环境管理为什么是深度学习的“第一道门槛”
1.1 版本冲突的本质:一个 Python 解释器装不下整个世界
很多人第一次用 pip install 装包的时候,都会遇到一个非常经典的问题:今天为了项目 A 装了 TensorFlow,明天为了项目 B 装了 PyTorch,结果项目 A 突然跑不起来了。原因很简单,不同框架依赖的 NumPy、SciPy 甚至 Python 解释器的版本不同,而这些包都安装在同一个全局环境里,相互之间会互相覆盖依赖。
深度学习领域的版本敏感程度比普通 Web 开发高得多。比如 PyTorch 1.x 和 2.x 之间、PyTorch 和 CUDA 版本之间,都有严格的对齐要求。一个训练脚本在 PyTorch 2.1 上正常,换到 1.13 可能直接报错,因为很多 API 的行为变了。如果你把所有的包都塞在同一个环境里,环境被搞坏只是时间问题。
虚拟环境就是解决这个痛点的标准方案。你可以把虚拟环境理解成一个独立的“小房间”,每个房间里有自己的一套 Python 解释器和第三方库,房间和房间之间完全隔离。项目 A 用 Python 3.9 + PyTorch 2.1,项目 B 用 Python 3.11 + PyTorch 2.5,完全互不干扰。这才是深度学习开发的正常打开方式。
1.2 管理工具选型:Anaconda、Miniconda、venv 与 Docker 的取舍
目前主流的 Python 环境管理工具主要有四个:Anaconda、Miniconda、Python 自带的 venv、以及 Docker。网上很多教程一上来就让人装 Anaconda,但其实它们各有利弊,我简单梳理一下。
Anaconda 是一个打包好的 Python 发行版,内置了 conda 包管理器和几百个常用科学计算包,安装完基本开箱即用。缺点是体积太大,安装包按 GB 计算,对新手来说还会遇到默认装在基础环境里、导致环境混乱的问题。
Miniconda 是 Anaconda 的精简版,只保留 conda 和 Python,需要什么包装什么包。体积小、思路清晰,我个人强烈推荐新手用 Miniconda 起步。因为深度学习本来就需要按项目精确控制依赖,Anaconda 自带的那些包反而容易造成干扰。
venv 是 Python 官方自带的虚拟环境工具,轻量级,但它不管理 Python 解释器本身的版本。如果你想在项目里用 Python 3.9,而系统默认是 3.11,用 venv 就得先手动安装对应版本的 Python,比较麻烦。
Docker 则把整个环境打包成容器镜像,隔离最彻底,但学习成本高,Windows 上还需要启用 WSL2 或 Hyper-V,对入门阶段来说属于“杀鸡用牛刀”。
综合来看,新手路径推荐是:Miniconda + conda 创建虚拟环境。conda 既能管理 Python 版本,又能管理第三方包,一条命令搞定环境切换。这套方案也是小土堆系列课程一直强调的基础工作流。
2. Python 环境管理保姆级实操流程
2.1 安装 Miniconda,而不是 Anaconda
先到官网下载 Miniconda 安装包,选择 Windows 64 位版本即可。官网的下载地址是 repo.anaconda.com,如果访问比较慢,可以找国内镜像站的安装包,路径一般类似清华 tuna 镜像的 miniconda 目录。
下载完成后双击安装,安装过程中有两个关键选项需要特别注意:
第一个是 “Install for” 选择,建议选 “Just Me”,不要选 “All Users”。选 All Users 在某些 Windows 系统上会需要管理员权限,而且容易导致安装路径过长、后续命令行找不到 conda 的问题。
第二个是安装到最后一步,安装器会问你要不要把 conda 添加到 PATH 环境变量,官方默认是不勾选的,但这里我建议勾上。不过要注意,如果电脑上已经有其他 Python 发行版,勾选后可能会出现命令行里 python 指向不一致的情况,这个在后面的排查部分我会详细讲。
安装完成后,打开命令提示符(cmd 或者 PowerShell),输入 conda --version,如果能正常显示 conda 版本号,说明安装成功。如果提示“不是内部或外部命令”,大概率是 PATH 没生效,重新打开终端或者手动把 conda 的 Scripts 目录加到系统环境变量里。
2.2 配置国内镜像源,下载速度飞起来
这一步属于没人提醒你绝对会踩的坑。conda 默认的下载源在国外服务器,在国内网络环境下,安装一个稍微大点的包可能要等很久,甚至经常连接中断。
解决办法是配置清华大学的 conda 镜像源。在命令行依次执行以下命令:
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/cloud/pytorch/ conda config --set show_channel_urls yes配置完成后,建议执行 conda config --show channels 检查一下源是否生效。这里要说一句,清华源确实快,但 PyTorch 官方源(也就是 cloud/pytorch 这个 channel)有时候同步不完全,尤其是最新版本发布后的头几天,可能出现从清华源找不到对应包的情况。这时候临时用官方源执行安装,速度慢点但稳定性有保证。
还有一个细节:如果要用 conda 安装 PyTorch 的 GPU 版,我会建议直接走 PyTorch 官方给出的命令,或者换成阿里云的镜像源。至于具体原因,涉及 NVIDIA 的 CUDA 包体积巨大,清华源同步压力大,经常不完整。
2.3 创建独立的深度学习虚拟环境
环境管理的第一条准则:永远不要把你的项目包装在 conda 的基础环境(base)里。基础环境相当于一个底层的系统环境,万一被依赖冲突搞崩了,所有项目都得跟着遭殃。正确的做法是为每个深度学习项目创建一个独立环境。
下面这条命令是我最常用的,创建一个名为 deeplearning、指定 Python 版本为 3.10 的虚拟环境:
conda create -n deeplearning python=3.10 -y千万别小看 python=3.10 这个参数,它可以让 conda 自动寻找系统中的 Python 3.10 解释器并绑定到这个环境里,省去手动安装 Python 的步骤。这也是 conda 相比 venv 的核心优势之一。
创建完成后,激活环境:
conda activate deeplearning激活成功后,命令行前面会多出一个 (deeplearning) 的前缀,说明你当前正身处这个虚拟环境。以后每次打开终端想跑项目,第一件事就是 conda activate 那个环境名字,否则你在 base 环境里装再多包,切到 deeplearning 环境后统统用不了。
进入环境后,输入 python --version 检查一下解释器版本,确认是我们刚才指定的 3.10。这个版本号要记牢,因为后面装 PyTorch 时,官方要求 Python 版本在 3.9 到 3.12 之间,3.10 是比较稳妥的中间选择,兼容性最好。
2.4 conda 常用命令速查与操作逻辑
掌握了创建和激活环境之后,剩下几个 conda 高频命令也要顺手学会,做个速查表方便大家随时翻阅。
| 操作 | 命令 | 说明 |
|---|---|---|
| 查看所有环境 | conda env list | 列出当前所有虚拟环境,当前所在环境标有星号 |
| 激活环境 | conda activate 环境名 | 切换到指定环境 |
| 退出环境 | conda deactivate | 回到 base 环境 |
| 安装包 | conda install 包名 | 在激活的环境内安装包 |
| 卸载包 | conda remove 包名 | 移除指定包 |
| 删除环境 | conda env remove -n 环境名 | 删除整个虚拟环境,连带所有包 |
| 导出环境配置 | conda env export > environment.yml | 把当前环境依赖导出为 YAML 文件 |
| 基于文件重建环境 | conda env create -f environment.yml | 从 YAML 文件还原环境 |
这些命令背后的逻辑,本质上就是“一个环境 = 一个依赖快照”。你把 environment.yml 文件发给别人,他可以在一分钟之内复现出跟你完全一致的环境,这对学术项目合作和开源代码复现来说极其重要。
3. 集显电脑安装 PyTorch:CPU 版完整实操
3.1 先搞清楚你的电脑到底能不能用 GPU
很多新手的误区是:只要装上了 PyTorch,代码里写了 .cuda() 就能用显卡训练。实际上,PyTorch 是否能用 GPU,取决于你有没有一块支持 CUDA 的 NVIDIA 独立显卡,以及是否正确安装了对应 CUDA 版本的 PyTorch。
如果你的电脑没有 NVIDIA 独显,只有 Intel 核显或者 AMD 核显,那么很遗憾,PyTorch 在这个环境下完全无法使用 CUDA 加速。AMD 显卡理论上可以通过 ROCm 支持 PyTorch,但 Windows 下的 ROCm 支持始终不成熟,配置极其痛苦,我不建议新手这样折腾。Intel 核显也有 OpenAPI 之类的实验性方案,但坑非常多。
所以,集显电脑最稳妥的路径,就是安装 CPU 版本的 PyTorch。有人可能会问:CPU 版跑不了大模型吧?确实跑不了大型训练任务,但用来学习深度学习基础、跑完小土堆系列里的案例、练习图像分类、线性回归这类入门项目,CPU 版的性能完全够用。等真正掌握了 PyTorch 的基本操作,再考虑入手带 NVIDIA 独显的电脑或者租用云 GPU,这是投入产出比最高的路线。
怎么确认自己电脑有没有 NVIDIA 独显?在 Windows 的任务管理器 -> 性能页面,左侧会列出所有的 GPU。如果看到 GPU 1、GPU 2 这样的条目,并且名字里有 NVIDIA 字样,说明你的电脑有 NVIDIA 独显;如果只有一个“Intel UHD Graphics”或者“AMD Radeon Graphics”,那基本可以断定只有核显。
3.2 CPU 版 PyTorch 安装命令与逐项解析
确定是集显电脑后,进入 PyTorch 官网去获取安装命令。官网上有一个选择界面,让你选 PyTorch Build、Your OS、Package、Language、Compute Platform。重点来了:Compute Platform 这一栏,集显电脑直接选 CPU,其他选项不用管。
此时官网会生成一条安装命令,CPU 版本在 Linux 和 Windows 下用 conda 安装的典型命令是:
conda install pytorch torchvision torchaudio cpuonly -c pytorch这条命令里有三个核心包:pytorch 是主框架,torchvision 是处理图像和数据集相关的扩展库,torchaudio 是音频处理扩展库。对于纯深度学习入门,torchaudio 可以暂时不装,但建议一次装齐,因为后面做语音相关项目会用到。
cpuonly 是一个特殊的标志包,告诉 conda 只安装 CPU 版本的 PyTorch,不拉取任何 CUDA 相关依赖。这也是集显安装和 N 卡安装最关键的区别点,拿 GPU 版的命令往集显电脑上安装,大概率会安装失败,或者即使装上了也无法发挥任何加速作用。
执行安装命令时,conda 可能需要花几分钟时间解析依赖关系。这里有个细节要提醒大家,conda 的依赖解析速度很慢,有时候看起来像卡住了,其实是它在计算各个包的兼容版本。安装过程中如果长时间卡在 “Solving environment” 阶段,可以这样缓解:把默认的 solver 从 classic 换成 libmamba。具体命令如下:
conda install -n base conda-libmamba-solver conda config --set solver libmamba这是一个优化过的依赖解析器,实测可以让 conda 的解析时间缩短好几倍。如果你想完全避开 conda 的解析过程,也可以直接用 pip 安装 CPU 版:
pip install torch torchvision torchaudiopip 默认会从 PyPI 拉取与当前平台匹配的包,Windows 集显环境下会自动安装 CPU 版。不过 pip 安装的包和 conda 管理的包虽然在同一个环境里,它们在包管理器层面是两套体系,可能发生依赖覆盖,所以除非项目文档明确要求,我一般优先用 conda。
3.3 验证安装是否成功的五步检查法
安装完成并不代表万事大吉。我见过太多人装完之后,运行代码报 ModuleNotFoundError 或者 ImportError,然后不知所措。验证环境是否正常的方法其实很简单,按下面的步骤逐条检查:
第一步,确认环境激活。在命令行输入 conda activate deeplearning,确保环境前缀存在。
第二步,进入 Python 交互环境:
python第三步,导入 torch 并打印版本号:
import torch print(torch.__version__)如果能打印出类似 2.5.1 这样的版本号,说明 PyTorch 导入成功。
第四步,查看 CUDA 可用状态:
print(torch.cuda.is_available())集显电脑上这里返回 False 是正常的,不要慌,这正是 CPU 版的预期表现。
第五步,启动 Jupyter Notebook,确认内核能正常导入 torch:
jupyter notebook然后在新建的 Notebook 里执行 import torch。小土堆系列的笔记之后会大量使用 Jupyter Notebook 进行演示,所以这一步尽量提前配好。如果直接执行 jupyter notebook 提示未找到命令,先在环境里执行一下:
conda install jupyter或者装一个类似 jupyterlab 的现代版本。
3.4 NVIDIA 独显用户的分支:GPU 版安装速览
虽然这篇文章的主角是集显,但如果你恰好有一台带 NVIDIA 独显的电脑,在这里简单交代一下 GPU 版安装的流程,方便以后换电脑时有个思路参考。
GPU 版安装命令通常长这样:
conda install pytorch torchvision torchaudio pytorch-cuda=12.1 -c pytorch -c nvidia这里的关键参数是 pytorch-cuda=n 版本,它决定了 PyTorch 编译链接的 CUDA 版本。不要理解成“安装 CUDA 12.1 这个软件”,而是理解为“安装一个依赖 CUDA 12.1 运行库的 PyTorch”。所以你没有手动安装 CUDA Toolkit 也没关系,这个命令会拉取对应版本的 CUDA 运行库,跟系统的其他软件不冲突。
选版本有个简单原则:直接看 PyTorch 官网当前推荐哪个 CUDA 版本,用官方推荐的就好。通常较新的 PyTorch 版本会随附一个稳定版本的 CUDA,两者已经绑定了。
装完 GPU 版后,验证命令有点不一样。需要额外执行:
print(torch.cuda.is_available()) print(torch.cuda.get_device_name(0))如果第一行输出 True,第二行输出你的显卡型号,比如 “NVIDIA GeForce RTX 3060”,说明 GPU 环境完美可用。这里有一个常见的坑:有些集显加独显的双显卡笔记本,PyTorch 默认会使用 NVIDIA 独显,不会使用集显,不用担心。如果两个输出都不正常,大概率是显卡驱动太老,更新驱动后再试。
4. 安装过程典型问题与排查思路
4.1 conda 下载速度慢、卡在 Solving environment 的主流解法
无数人私信问过我同一个问题:安装 PyTorch 的时候下载速度特别慢,用手机开热点也一样,怎么办。
下载速度慢的第一个解决思路,就是 2.2 小节里提到的配置国内镜像源。配置完成后 conda 会优先从清华源拉取包,下载速度能提升几十倍。但要注意,镜像源对 PyTorch 官方 channel 里的包支持不一定完整,如果从清华源找不到某个包,可以在命令行加上 -c pytorch 强制从官方源下载该包:
conda install pytorch torchvision torchaudio cpuonly -c pytorch第二个解决思路是换 pip 源。如果 conda 怎么都不顺,可以放弃 conda 安装,改用 pip,并把 pip 的默认源换成清华 PyPI 镜像:
pip install torch torchvision torchaudio -i https://pypi.tuna.tsinghua.edu.cn/simple这条命令对国内网络非常友好,PyPI 的清华镜像同步速度很快,torch 的 CPU 包大约 200MB 左右,正常网速下几分钟就下完了。
至于卡在 Solving environment 的问题,前面已经提过,升级 conda 的 solver 到 libmamba 就可以大幅缓解,这里不再重复。
4.2 import torch 报错的各种典型场景
常见报错一:ModuleNotFoundError: No module named 'torch'。这种报错基本可以断定你当前激活的环境和你安装 PyTorch 的环境不一致。检查一下命令行前面的环境名,然后重新激活环境,再执行 import torch。
常见报错二:DLL load failed while importing torch。Windows 上经常出现,原因是缺少必要的系统运行库,常见的是 Microsoft Visual C++ Redistributable 未安装。去微软官网下载最新的 VC_redist.x64.exe 安装即可。
常见报错三:cuDNN 相关报错。集显 CPU 版理论上不会出现,如果出现,说明你可能误装成了 GPU 版。用 conda list 查看当前环境里有没有 cuda 相关的包,有的话直接卸掉重装 CPU 版。
4.3 Python 不同版本兼容性的选择建议
PyTorch 对 Python 版本的支持有明确范围,一般建议使用 3.9 到 3.12。我自己的习惯是 Python 3.10,因为它在当前生态中兼容性最好,几乎所有的深度学习库都对其提供了完善支持。Python 3.12 因为引入了一些 C 扩展 API 的变化,部分老库的预编译包可能还没有及时跟进,用的人还偏少。
在安装时,如果你不指定版本,conda 可能会为新环境选择最新的 Python,这在某些极端情况下会导致 PyTorch 找不到对应包。所以创建环境时一定要显式指定 python=3.10,把不确定性扼杀在摇篮里。
再提醒一下:Windows 系统下,Python 的 32 位版本和 64 位版本也有可能造成兼容性问题。Miniconda 默认安装的是 64 位版本,这个不要随意改动。
4.4 PyTorch 2.6 的一个新变化:weights_only 参数提醒
PyTorch 2.6 发布之后,官方把 torch.load 函数的 weights_only 参数的默认值从 False 改成了 True。这个变化的意思是,当你直接用 torch.load 加载一个没有经过特殊保护的模型文件时,可能会遇到类似 “WeightsUnpickler error” 的报错。
这算不上 bug,而是官方出于安全考虑的变更。因为旧的 pickle 反序列化机制存在任意代码执行的风险,收到恶意模型文件时可能被攻击。入门阶段如果突然遇到模型加载报错的情况,可以先用官方推荐的写法:
torch.load('model.pth', weights_only=True)如果模型文件是在旧版本 PyTorch 下保存的,可能需要用 weights_only=False 来强制加载,但前提是你信任这个模型的来源。这个知识点在后续学习模型保存和加载时会反复遇到,提前打个预防针。
5. 环境管理进阶:多项目协同与重建
5.1 用 environment.yml 实现一键复现
在实际的深度学习项目中,团队协作是常态。别人跑通了某个项目,你要在自己的机器上复现。这时候,一份 environment.yml 文件比你手动安装一百个包管用得多。
在已经激活的环境里执行:
conda env export > environment.ymlconda 会把当前环境里所有包的名称、版本号、来源渠道全部写入这个 YAML 文件。其他人在拿到这个文件后,只需要:
conda env create -f environment.yml就可以一键生成一个完全相同的环境。不过这里有个坑要注意:conda env export 导出的文件里包含了你本机的特定路径,比如挂载在某个盘符下的包名,直接换电脑使用可能报错。更稳妥的做法是用 conda env export --from-history,这样只导出你手动执行过 conda install 的命令,那些依赖的传递性包不会记录进去,可移植性更好。
5.2 Anaconda 目录结构解析与 PATH 环境变量
新手对 conda 的目录结构一头雾水,不知道自己装的东西到底去了哪里。理解目录能帮助你排查一些奇怪的错误。
典型的 Anaconda 安装目录结构如下:
Anaconda3/ ├── python.exe # base 环境对应的 Python ├── conda.exe # conda 命令行工具 ├── envs/ # 所有虚拟环境所在目录 │ ├── deeplearning/ # deeplearning 环境的根目录 │ │ ├── python.exe # 该环境对应的 Python │ │ └── Lib/site-packages/ # 该环境下的第三方库 ├── Lib/site-packages/ # base 环境的第三方库看到这里你应该明白了,每个虚拟环境本质上就是一个独立的 Python 可执行文件加一个独立的 site-packages 目录。当你激活环境时,命令行使用的 python 命令就不再是系统全局的那个,而是指向 envs/deeplearning/python.exe。
PATH 环境变量的作用,就是决定当你输入 conda 或 python 时,系统去哪个目录找可执行文件。如果你之前手动安装过 Python 并加入了 PATH,而 conda 的路径排在后面,就有可能出现“明明 conda 里装了 PyTorch,但 python 命令跑的是另一个解释器”的混乱。排查方法很简单,在命令行输入:
where python看到的结果第一行,就是你当前真正执行的 python 所在路径。如果它指向 conda 环境目录,一切正常;如果指向别的地方,说明 PATH 顺序有问题,需要手动调整。
5.3 Jupyter Notebook 内核绑定与多环境切换
很多人的习惯是打开 Jupyter Notebook 写代码,但会遇到一个问题:启动 Jupyter 后,在 Notebook 里 import torch 报错,但命令行里明明可以正常导入。的原因很直接——启动 Jupyter 的时候用的是 base 环境下的 Jupyter,它默认运行的是 base 环境的内核,而不是你深度学习的虚拟环境。
解决办法是在虚拟环境里安装 ipykernel,并把环境注册为 Jupyter 的内核:
conda activate deeplearning conda install ipykernel python -m ipykernel install --user --name deeplearning --display-name "Python (deeplearning)"之后启动 Jupyter Notebook,在“新建”下拉菜单里就能看到 “Python (deeplearning)” 这个选项,选中它运行的代码就会落在你的虚拟环境里。如果你有多个环境,可以都注册进去,然后在 Notebook 里的 “Kernel -> Change Kernel” 随时切换,非常方便。
这是小土堆系列笔记的基础前提:环境彻底理顺了,之后的代码才能跑得顺畅。这套流程不仅适用于 PyTorch,之后你接触 TensorFlow、PaddlePaddle 或者任何深度学习项目,都逃不开同样的模式。
5.4 双环境实践的提醒:不要污染 base 环境
最后说一个我见过无数人犯的错。很多初学者图省事,直接在 base 环境里 pip install torch,装完后 pytorch 也确实能跑,就懒得建环境了。但这样做的后果是:下次你需要装另一个项目,比如某个 GitHub 开源代码依赖 PyTorch 1.13,而你 base 里已经是 PyTorch 2.5,你只能把 2.5 卸了重装。反复折腾几次之后,base 环境里留下的垃圾包越来越多,最后只能重装 Anaconda。
我的建议是:把 base 环境当成一个干净的控制台,只放 conda、python、jupyter 这类基础工具,所有项目依赖一律建独立环境。虽然初期看起来多了一个“激活环境”的步骤,但长远来看,它会让你在多个项目之间切换时一点负担都没有。真的,环境整洁程度决定了你到底能走多远。