刚入行那会儿,但凡有人问“Win10 下怎么装 PyTorch”,我的第一反应都是甩过去一条 pip 命令。后来帮别人排查环境问题排到自己怀疑人生,才意识到:安装 PyTorch 这件事,真正的分水岭不是“敲出那条命令”,而是“装之前有没有想清楚 Anaconda、虚拟环境和 CUDA 版本之间的关系”。这篇东西就把我在 Win10 上用 Anaconda 装 PyTorch 的完整思路、实操命令和踩坑记录整理出来,适合刚从零起步的新手,也适合被各种奇怪报错困扰的中级用户。核心目标只有一个:让你装完不是“能跑”,而是“知道它为什么能跑”。
1. 为什么我用 Anaconda 而不是直接装 Python
1.1 装 PyTorch 最大的风险不是装不上,而是把系统环境搞乱
很多人觉得安装 PyTorch 就是“打开命令行,按个回车”,但实际项目里最头疼的往往不是 PyTorch 本身,而是它和 numpy、opencv、pandas 这些包之间的版本纠缠。比如某个老项目需要 numpy 1.21,而新项目用 PyTorch 时又被依赖拉到了 numpy 1.26,两个项目放在同一个 Python 环境里,早晚要打架。
Anaconda 的价值在这里就体现出来了:它自带的 conda 管理工具可以创建相互隔离的虚拟环境。每个环境里有自己独立的 Python 解释器和包集合,玩坏了直接删掉重建,base 环境永远是干净的。我用这个方法在同一个开发机上同时维护过三个环境:一个跑旧版 TensorFlow,一个跑最新 PyTorch,还有一个专门做数据处理,彼此互不干扰。
1.2 Anaconda 和 Miniconda 到底选哪个
Anaconda 默认带了一堆科学计算包,装完体积通常几个 G,适合不想折腾基础环境的人。Miniconda 只带 conda 和最小依赖,体积小、安装快,我会更推荐有一定基础或不想被预装包绑架的朋友选 Miniconda。
标题里既然写了“Anaconda”,下面都按完整版 Anaconda 来写。其实安装完后续操作完全一样,因为真正干活的是 conda 这条命令,不是自带的 IDE 或预装包。
1.3 安装 Anaconda 时最关键的选项:Add to PATH
安装过程中的一个选项很多人会忽略:是否把 Anaconda 加入系统 PATH。
- 勾选 Add to PATH:以后直接在 PowerShell 或 CMD 里敲 conda 就有反应,但可能会和你机器上已有的 Python 抢“默认解释器”。
- 不勾选:更干净,但你必须通过“开始菜单里的 Anaconda Prompt”来使用 conda。
我的建议是默认不勾选,用 Anaconda Prompt 操作。这样你不用承担 PATH 顺序混乱带来的风险,也足够应付绝大多数场景。如果实在想在普通终端里用 conda,装完后手动执行一次初始化指令即可,稍后讲到环境激活时再细说。
2. 环境准备:先建好独立空间再下载 PyTorch
2.1 第一步先创建虚拟环境,别直接往 base 里装
很多教程告诉你安装 PyTorch 之前要先建虚拟环境,但没说清楚为什么。我举个例子:你今天因为 PyTorch 更新装了一堆新依赖,明天另一个项目装老版本 PyTorch 时发现 torchvision 要求某个旧版 numpy,conda 就会试图把 base 里的 numpy 降级,降级完新项目挂了,老项目却还是跑不起来。
所以我的习惯是,任何项目都先执行下面这条命令:
conda create -n pytorch_env python=3.10这里的pytorch_env是环境名称,可以随便起,比如torch、dl、gpu都行。关键在于python=3.10,它解决了“用哪个 Python 版本”的问题。
2.2 Python 版本选 3.10 还是 3.12
选 Python 版本确实不用太激进。PyTorch 一般会在新版本发布后的几个月内适配最新 Python,但 Windows 平台上我吃过“版本太新导致某些扩展包没有预编译轮子”的亏。
目前 3.9 到 3.11 都比较稳。我更推荐 3.10,原因很朴素:常用的包在 3.10 上基本都有预编译好的二进制包,装起来快,兼容问题少。如果你没有特殊理由,直接照抄 3.10 就行。
2.3 为什么要用 conda activate 而不是直接 pip install
创建完环境后,需要激活:
conda activate pytorch_env激活之后,当前终端的所有操作都发生在这个独立环境里。你会看到命令行提示符前面多了一个(pytorch_env),这说明你已经在环境里了。此时再执行pip install,装的包才属于这个环境,不会污染 base,也不会被系统的其他 Python 干扰。
这里有个新手常见的误区:conda 是包管理器,pip 也是包管理器,但两者装包的位置不总是一致。确认自己到底在哪非常关键。装完 PyTorch 后如果import torch失败,90% 是当前命令行实际用的是另一个环境的 Python。
3. PyTorch 版本和 CUDA 版本怎么选,直接决定了你装的包对不对
3.1 先搞清楚自己电脑里有没有可用的显卡
PyTorch 分成 CPU 版和 GPU 版,两者的差别不是“功能多少”,而是“能不能用显卡加速训练”。训练一个稍大的模型时,GPU 的提速效果往往是几十倍量级的。
先检查硬件。打开任务管理器,看“性能”标签页里有没有 GPU 一项。如果有独立显卡,那就还需要确认:显卡驱动是不是正常安装。最直接的方法是在命令行执行显卡驱动自带的监控指令,通常能输出驱动版本号、驱动总线和显存信息。有这一行输出,才说明显卡是可用状态。
如果没有独立显卡,或者恰好在某台只有核显的笔记本上操作,那就老老实实装 CPU 版。CPU 版不用管 CUDA,安装命令更简单,日常跑结构简单的网络、做推理验证完全够用。
3.2 CUDA 到底是什么,和显卡驱动有什么区别
这是 Windows 用户最容易混乱的点。
- 显卡驱动:由显卡厂商提供,负责操作系统和显卡硬件之间的通信。
- CUDA 版本:显卡厂商提供的并行计算平台,深度学习框架靠它调用显卡的计算单元。
- PyTorch 的 GPU 版安装包:里面已经内置了一套运行所需的 CUDA 库,不需要你手动去官网下载 CUDA Toolkit 再配环境变量。
所以关键概念是:PyTorch 安装包里带的 CUDA 只要求你的显卡驱动不低于某个最低版本,而不要求系统里已经装好了同名版本的 CUDA Toolkit。你只需要关注“显卡驱动当前支持多高的 CUDA 版本”这一项。驱动支持的上限如果高于或等于 PyTorch 需要的版本,直接装就行,驱动上限低的话就得选一个较旧的 PyTorch 版本。
3.3 CPU 版和 GPU 版的选择对照
| 条件 | 建议安装版本 | 后续是否需要关注 CUDA |
|---|---|---|
| 有独立显卡,驱动较新 | GPU 版 | 需要检查驱动支持上限 |
| 有独立显卡,但驱动较旧 | GPU 版对应旧 CUDA | 选和驱动匹配的老版本 |
| 只有核显,或无可用显卡 | CPU 版 | 完全不用考虑 |
| 虚拟机、远程桌面环境 | CPU 版为主 | GPU 通常不可直通 |
3.4 PyTorch 版本与 CUDA 版本的大致对应
PyTorch 官方一般会同时发布多个 CUDA 版本的安装包,例如:
- PyTorch 2.0 时期常见的是 cu117、cu118
- PyTorch 2.1 时期常见的是 cu118、cu121
- PyTorch 2.2 到 2.4 时期常见的是 cu118、cu121,部分版本提供 cu124
- PyTorch 2.5 及之后,cu121、cu124、cu126 成了主流可选
这个表格迟早会过时,所以我更建议你安装前打开 PyTorch 官网的安装页,选择“Windows + conda / pip”,它会直接给出对应命令。关键是理解数字背后的含义:cu118 表示这个包面向 CUDA 11.8,cu121 表示 CUDA 12.1。
如果你在驱动检查里看到驱动支持上限是 CUDA 12.x,那么选 cu121 或更新一点的版本通常没问题;如果上限停在 11.8 或更低,就需要找老版本的 PyTorch。
4. 安装命令拆解:换源、执行、验证这三件事一起做
4.1 先把 conda 和 pip 的下载源搞定
Win10 下安装 PyTorch 最大的实际障碍不是选择困难,而是网络。Anaconda 官方的包仓库和 PyTorch 官方下载源在国外,直连时经常出现连接超时、下载到一半中断、更卡的情况。解决办法是用国内镜像源把默认源替换掉。
conda 换源方式是在终端里执行配置命令,把频道地址改到一个国内镜像站。不同镜像站路径可能略有差异,原则是照着镜像站文档给出的地址填就行。我一般这样操作:
# 以某镜像站为例,把地址换成实际可用的镜像地址 conda config --add channels https://mirrors.example.com/anaconda/pkgs/main conda config --add channels https://mirrors.example.com/anaconda/pkgs/free conda config --add channels https://mirrors.example.com/anaconda/cloud/conda-forge conda config --set show_channel_urls yespip换源则更简单:
# 同样是示例地址,替换成你实际使用的镜像源 pip config set global.index-url https://mirrors.example.com/pypi/simple设置完成后,可以先执行conda info看当前 channel 列表有没有生效。别小看这一步,我在安装时遇到的 90% 的下载超时问题,都是因为源没换干净。
4.2 我推荐的主安装命令:pip 方式
虽然标题写的是“借助 Anaconda 安装”,但 Anaconda 在这里最核心的职责是环境管理。PyTorch 的 Windows 安装包在 pip 源里通常更新更及时,且包内含 CUDA 运行库,安装过程更省心。
在已激活环境的前提下,我这里以 “有显卡、用 CUDA 12.1 版本” 为例:
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121这条命令拆开解释:
torch:PyTorch 主库。torchvision:图像和视频处理相关的工具库,一般配套安装。torchaudio:音频处理工具库,做语音任务才需要,不需要可以直接去掉。--index-url:明确指定从哪个源下载。这里用的是 PyTorch 官方提供的 CUDA 12.1 轮子目录。
如果你不想用 GPU,把最后面的 cu121 换成 cpu 即可,我不建议用默认 PyPI 装 CPU 版本,因为默认源可能给你装成不带任何 CUDA 支持的版本,后续想换又得折腾。
4.3 conda 安装方式也值得知道
如果你更倾向全用 conda 安装,也可以这样装(这里给出逻辑示意,频道名称以官方安装页为准,通常需要显式指定 PyTorch 的官方频道和配套频道):
conda install pytorch torchvision torchaudio pytorch-cuda=12.1这个命令的坑在于:如果不加pytorch-cuda这个占位包,conda 很可能只给你装 CPU 版本。很多人在这一步踩过坑,装完才发现torch.cuda.is_available()一直返回 False。
4.4 下载到一半卡住怎么办
无论用 conda 还是 pip,下载大文件时都可能卡在“Downloading”状态。我的经验是:
- 先确认
pip用的是不是国内镜像源,如果还没有换源,先换源再重试。 - 加长超时时间:
pip --timeout 120 install ... - 不要反复按 Ctrl+C 中断再重试,这样反而容易下载到一半后重新下载。等一会儿,如果长时间没速度,再中断重试。
- 中大体积安装包需要磁盘空间,C 盘空间不足也会导致解压失败。安装前可以看看剩余空间,预留 5 G 以上比较稳。
5. 装完之后,三步验证是不是真的能用
5.1 验证 import 是否成功
激活环境后,依次执行:
python -c "import torch; print(torch.__version__)"能打印出版本号,说明基础安装成功。如果这一步报ModuleNotFoundError: No module named 'torch',问题通常出在环境错位:你激活的环境里根本没有 PyTorch。这时候先执行:
python -c "import sys; print(sys.prefix)"看看当前 Python 所在目录,再检查这个目录是否属于你的pytorch_env环境。两个人说是同一个环境,实际用了两个解释器的情况我见过太多次了。
5.2 验证 CUDA 是否真的被识别
下一步验证显卡:
python -c "import torch; print(torch.cuda.is_available())"返回True,说明 PyTorch 已经识别到可用的显卡计算环境;返回False,说明装的很可能不是 GPU 版,或者驱动版本太旧。这个时候先别急着重装,先看版本信息:
python -c "import torch; print(torch.version.cuda)"如果torch.version.cuda为空,那基本可以确定装成了 CPU 版。
5.3 用一个小张量操作验证 GPU 真的在干活
cuda.is_available()返回 True 并不代表模型训练就一定能顺利调用显存。我习惯再跑一个实际张量测试:
import torch x = torch.rand(3, 3).cuda() y = torch.rand(3, 3).cuda() z = torch.mm(x, y) print(z)只要能正常输出一个 3x3 的张量结果,说明数据流动、显存分配、基础算子链路都是通的。这一步比单纯的 is_available 更能暴露底层的驱动和运行库问题。
5.4 确认环境归属:不要装完发现又跑到 base 去了
搞不清自己当前在哪个环境,是所有后续问题的根源。建议把环境检查固化成习惯:每次打开新终端,先conda activate pytorch_env,再执行python。在 PowerShell 中,如果激活失败,命令行前面没有出现环境名称,说明 conda 没有初始化到当前 shell,需要先在终端里执行一次 conda 的初始化动作,再重新打开终端窗口。
6. 安装过程中我踩过的坑与排查思路
6.1 Windows PowerShell 激活环境失败
第一次在 Win10 上用 PowerShell 激活 conda 环境时,遇到过系统提示“无法加载配置文件,因为在此系统上禁止运行脚本”。这不是 conda 或者 PyTorch 的问题,而是 PowerShell 的默认执行策略限制。
解决办法是,用管理员身份打开 PowerShell,执行:
Set-ExecutionPolicy -Scope CurrentUser RemoteSigned再重新打开终端,conda activate就正常了。如果你不想改执行策略,直接用 Anaconda Prompt 也行,那个窗口默认已经配置好了。
6.2 装完发现是 CPU 版,这是一个体系性的错误
我第一次用 conda 装 PyTorch 时,天真地以为执行完conda install pytorch torchvision torchaudio就万事大吉。结果是:torch.cuda.is_available()永远返回 False。查了一圈才发现,这条命令默认拉取的是 CPU 版本,必须单独指定pytorch-cuda版本号。
如果依赖 pip 安装,则要看清楚--index-url里是不是带了 cu 字样,紧紧是pip install torch,默认装出来的版本可能是 CPU 版本,取决于你用的源。
6.3 花了一小时排查 DLL 加载失败
还有一个常见报错是 import torch 时出现找不到某个动态链接库的提示,或者直接说“DLL load failed”。这种情况多半是:
- 显卡驱动版本太旧,导致运行时所需的加速库无法正常加载。
- 和系统里的旧 CUDA 环境变量发生冲突。
排查思路是:先检查驱动上限版本,再看 PyTorch 包的版本是不是和驱动相差太大。如果驱动只能支持到 CUDA 11.x,你却装了 cu121 的包,出现动态库问题很正常。换成 cu118 或更老版本的包,问题往往迎刃而解。
6.4 环境被我搞乱之后,最快的恢复方式是拔掉重来
讲一个大多数人不太愿意面对的事实:当环境依赖已经变成一团乱麻时,花几十个小时去“修复”不如直接删掉重建。
conda deactivate conda env remove -n pytorch_env -y conda create -n pytorch_env python=3.10 conda activate pytorch_env这套操作下来往往只需要十几分钟,就能回到干净的状态。很多刚入门的同学舍不得删环境,担心重新装会踩同样的坑,其实只要把换源、版本选择这些要点记住,重建环境反而更快。我自己现在的原则是:一旦环境里出现无法解释的依赖冲突,第一反应就是备份代码,删除环境,从头来过。
6.5 一个能帮你省下大量排查时间的小习惯
最后分享一个我个人的工作习惯:把验证脚本存成一个独立文件,比如check_torch.py,里面包含三行核心验证逻辑:
import sys import torch print("Python:", sys.prefix) print("PyTorch:", torch.__version__) print("CUDA available:", torch.cuda.is_available()) if torch.cuda.is_available(): print("torch CUDA:", torch.version.cuda)换环境、换机器、升级驱动之后,先跑一遍这个脚本,所有关键信息一目了然。很多所谓的“安装失败”,其实只是“在一个没想到环境里运行了一个没想到的版本”。有了这个脚本,你就不用每次都临时敲命令,出问题也能第一时间判断是环境问题、驱动问题还是版本问题。