
1. 先想清楚为什么是 Python PyCharm PyTorch CPU 版我接触过不少刚入门深度学习的朋友卡住他们的往往不是反向传播、卷积这些概念而是最前面这一步——环境搭不起来。今天就围绕深度学习环境完整安装(PythonPycharmPytorch cpu版)这个主题把我这几年在一台台机器上重复折腾了十几遍的流程完整地拆开讲一遍。这套组合适合三类人零基础想入门深度学习的学生、手头只有普通笔记本没有独立显卡的开发者、以及需要在一台干净机器上快速跑起一个验证脚本的工程人员。为什么强调 CPU 版因为不是每个人都有能用的独立显卡而 CPU 版 PyTorch 在跑小规模模型、验证代码逻辑、做课程作业这些场景下完全够用安装过程还省去了显卡驱动、CUDA 工具链这一大堆最容易出问题的环节。我个人的一个判断是初学阶段最怕的不是跑得慢而是根本跑不起来。你拿一块高端显卡去装 GPU 版光驱动版本和 CUDA 版本对应关系就够你查半天一个不匹配就是一行报错。而 CPU 版的安装链路短、依赖少、报错信息也干净特别适合用来把“从写代码到看结果”这个闭环先打通。等这套流程你闭着眼都能走一遍了再升级到 GPU 版就是水到渠成的事因为那时候你对虚拟环境、包管理、解释器绑定这些底层概念已经心里有数了。所以这篇文章的目标很明确让你在一台全新的机器上从零把 Python、PyCharm、PyTorchCPU 版这条链路完整跑通并且知道每一步为什么要这么做、坑在哪里、出错了怎么查。下面我会按“选型思路 → 分步实操 → 验证跑通 → 问题排查”的顺序展开每一步都尽量给出可复制的路径和参数。1.1 CPU 版和 GPU 版的真实差距在哪里很多人对 CPU 版有误解觉得 CPU 版就是“残废版”。这个说法要分场景看。深度学习里绝大部分运算本质上是矩阵乘法和卷积这类运算在 GPU 上因为几千个并行核心同时开工确实能比 CPU 快几十倍甚至上百倍。但这里有个前提只有当模型参数量足够大、数据量足够多、batch size 足够大的时候GPU 的并行优势才能充分发挥。如果你只是跑一个几百个参数的小网络、或者在做一个手写数字识别的练习瓶颈往往在数据加载和 Python 解释器本身的开销上这时候 GPU 和 CPU 的差距会被大幅压缩有时候甚至感觉不到明显区别。我在一台普通轻薄本上用 CPU 跑 MNIST 做了一个简单对比一个两层卷积加两层全连接的小网络训练 5 个 epoch全程大概几分钟。这个速度用在学习和验证上完全可以接受你完全可以边看结果边调参数。真正需要 GPU 的场景是你要训练稍微像样的模型、要处理图像或文本的较大数据集、要做迁移学习微调预训练模型。这种时候 CPU 版会让你等到怀疑人生。所以我的建议是先 CPU 版把流程和代码逻辑练熟等确认真要往深里走了再考虑添置设备或者用带显卡的机器不要在还没写几行代码的时候就在硬件上纠结太久。还有一个容易被忽略的点CPU 版和 GPU 版的代码在绝大多数情况下是同一套。你写的模型定义、训练循环、数据管道只要不硬编码.cuda()换到 GPU 机器上基本就是改一行device变量的事。也就是说你现在用 CPU 版学的东西百分之九十以上可以直接迁移到 GPU 环境不会浪费。1.2 三个组件各自扮演什么角色这套组合里三个东西分工很清晰理解了分工后面每一步的意图就自然明白了。Python 是语言运行时负责执行你写的所有代码它本身只是一个解释器和标准库不具备任何深度学习能力。PyTorch 是深度学习框架它是一个安装到 Python 环境里的第三方库提供了张量运算、自动求导、神经网络层、优化器这一整套工具你可以理解成“一堆帮你实现数学运算和模型训练的代码集合”。PyCharm 是集成开发环境它负责让你舒服地写代码、管理项目、运行调试本质上它是在背后调用 Python 解释器来执行你的脚本它自己不参与任何计算。这里最容易让人困惑的是 PyCharm 和 Python 的关系。很多新手以为装了 PyCharm 就等于有了 Python其实不是。PyCharm 只负责“管理和调用”真正执行代码的始终是那个独立的 Python 解释器。所以你会看到后面有一个关键步骤叫“给项目绑定解释器”本质就是告诉 PyCharm“去用这个路径下的 Python 来跑我的代码。”没绑定对就会出现你明明装了某个库PyCharm 里却提示找不到的诡异情况——因为 PyCharm 用错了 Python你装的库在另一个 Python 里。提示不要把 Python、PyCharm、PyTorch 三个东西的安装顺序搞混。正确顺序是 Python → PyCharm → PyTorch。PyTorch 必须装在 Python 环境里PyCharm 只是最后用来指挥它们干活的。2. Python 安装版本选择和 PATH 这一步千万别踩坑Python 是整条链路的地基这一步没搞好后面全白搭。我见过太多问题最后追根溯源都是 Python 装得不干净导致的装了多个版本互相打架、PATH 没配上导致命令行里敲 python 没反应、或者用了一个太新的版本结果某些库还没适配。2.1 到底该选哪个 Python 版本先说结论不要盲目追最新版选一个当前主流、生态适配完善的稳定版本。深度学习的各个库对 Python 版本的跟进是有延迟的某个新版本刚发布时一些科学计算相关的包可能还没有对应的预编译 wheel你装的时候就得现场编译那过程能让你崩溃。我一般会选发布一年左右、社区反馈稳定的版本这个时间点上主流库的适配基本都跟上了。对 Windows 用户来说安装包从 Python 官网下载即可注意勾选那个“Add Python to PATH”的复选框这是安装向导里最重要的一步。很多人安装时一路下一步把这个勾选漏了结果命令行里敲python提示“不是内部或外部命令”然后又得手动去配环境变量平白多走一段弯路。如果你是 macOS 用户系统自带的是 Python 2 的老版本或者根本没有建议用官方安装包装一个新的别去动系统自带的那个系统有些工具依赖它乱动容易出问题。Linux 用户相对来说简单大多数发行版自带 Python但同样建议装一个独立的版本用于开发把系统自带的和开发用的分开。场景建议方案原因Windows 全新机器官网安装包勾选添加到 PATH最省事一步到位macOS官网安装包或包管理器安装避开系统 Python 2Linux独立安装一个版本不动系统的系统工具依赖自带版本2.2 安装过程和验证方法下载好安装包之后Windows 上的操作流程大概是双击运行第一屏务必勾选“Add Python to PATH”然后选择“Install Now”或者自定义安装路径。自定义路径的话我建议路径里不要有中文和空格比如放在D:\Python\这种简单路径下因为空格和中文在后续某些工具处理路径时容易出幺蛾子这是个说不清道不明但真实存在的坑。安装完成后必须验证。打开命令行Windows 上按 WinR 输入 cmdmacOS 和 Linux 打开终端输入两个命令来确认python --version pip --version如果第一条命令能输出你安装的版本号第二条能输出 pip 的版本号说明 Python 装好并且 PATH 配对了。如果提示找不到命令先别急着重装大概率是 PATH 的问题。Windows 上可以在“系统属性 → 高级 → 环境变量”里检查用户变量和系统变量里的 Path看有没有 Python 的安装目录和它下面的 Scripts 目录。这两个都要有缺一个就会出现python能用但pip不能用的怪问题。macOS 和 Linux 上如果系统里存在多个 Python可能需要用python3和pip3来区分这个要看你安装的时候有没有建立 python 这个软链接。我的习惯是每次都明确用python还是python3避免歧义。注意如果你之前装过 Python 但卸载过重装前建议去安装目录和用户目录下清理一下残留的pip缓存和旧的环境变量残留是导致各种奇怪问题的常见原因。2.3 一个小验证确认 pip 能正常装包Python 装好之后顺手验证一下 pip 能不能真正装包这样能把网络和权限问题提前暴露出来。随便装一个小而干净的包试试比如pip install requests如果进度条正常跑完、最后显示Successfully installed说明 pip 和网络都没问题。如果卡住不动或者报连接超时那就是网络访问源的问题这时候可以配置一下镜像源来加速。国内常用的镜像源配置方式是在 pip 配置文件里指定或者在命令里临时加参数pip install requests -i https://pypi.tuna.tsinghua.edu.cn/simple这个镜像源的原理很简单pip 默认去国外的官方仓库拉包跨境访问不稳定换成国内镜像就是把下载地址指到一个国内同步的仓库上速度和成功率都会好很多。这个配置对后面的 PyTorch 安装尤其重要因为 PyTorch 的安装包体积不小用默认源下载经常中途断掉。如果这一步验证通过了Python 这块就基本稳了可以进入下一步。3. PyCharm 安装与解释器绑定新手最容易败在这里PyCharm 是 JetBrains 出品的 Python 集成开发环境社区版免费专业版功能更多但需要授权。对深度学习入门来说社区版完全够用我一直在用社区版从来没觉得缺什么关键功能。3.1 社区版够不够用怎么选先回答那个每个人都想知道的问题社区版和专业版到底差在哪入门要不要上专业版。简单说专业版主要在远程开发、数据库工具、Web 框架支持、科学计算工具的深度集成这些方面多一些能力而这些对纯写深度学习脚本的初学者来说基本用不上。社区版支持完整的编辑、调试、运行、版本控制、虚拟环境管理功能你要写模型、跑训练、看输出社区版一点不虚。所以我的建议很直接入门就用社区版免费、安装包小、启动也快。等你以后真的需要在远程服务器上开发、或者需要那几个专业功能了再考虑。安装过程也很简单官网下载对应系统的安装包双击运行一路下一步即可。中间有一个选项问你要不要关联.py文件、要不要添加到右键菜单建议都勾上方便后续直接右键打开文件。Windows 上安装路径同样建议避开中文和空格跟 Python 一个道理。macOS 上就是拖进应用程序目录Linux 上通常从官网下 tar.gz 解压后运行启动脚本或者用 snap 安装。装完之后第一次启动会让你选主题、设置快捷键方案这些按自己喜好来就行不影响后面。3.2 PyCharm 和 Python 的绑定是整个环节的关键这是我见过新手翻车最多的地方。你把项目在 PyCharm 里打开写了一段代码点了运行结果报错说找不到某个库但你刚才明明在命令行里用 pip 装过了。这种情况九成九是因为PyCharm 用的 Python 和你命令行里的 Python 不是同一个。PyCharm 在创建项目的时候会问你要用哪个解释器这时候一定要注意看清楚路径。我的建议是先在命令行里用下面的命令确认一下当前用的 Python 在哪python -c import sys; print(sys.executable)这个命令会打印出当前 Python 解释器的完整路径把这个路径记住。然后在 PyCharm 里创建项目时选择“已存在的解释器”手动指定到这个路径。这样就能保证命令行装好的包PyCharm 里能直接用。常见现象真实原因解决方向PyCharm 里 import 报错PyCharm 用了另一个解释器检查并重新绑定解释器命令行装包 PyCharm 看不到两者环境不一致统一到同一解释器换了项目又报错每个项目绑定的解释器不同确认项目级解释器设置绑定好之后PyCharm 右下角会显示当前解释器的名字和版本你可以点开它查看已经安装的包列表。如果能看到你之前用 pip 装的那些包就说明绑定对了。这个习惯我建议一直保持装完任何包先到 PyCharm 的解释器设置里看看能不能看到它比反复试运行要高效。3.3 第一次配置的几个顺手设置PyCharm 装好之后有几个设置我每次都会调调完体验会顺畅很多。第一是字体和字号看代码看得舒服比什么都重要第二是自动导入把 Python 相关的自动导入提示开上写torch.的时候能自动补全模块第三是把代码检查的黄绿波浪线提示调到一个合理的级别新手容易被满屏的警告吓到其实很多是无害的提示。还有一个实用功能是“运行配置”。第一次运行脚本时PyCharm 会问你要不要保存运行配置保存之后以后点那个绿色三角就是按固定配置跑包括工作目录、环境变量这些。工作目录这个参数有讲究如果你的代码里用了相对路径读取数据文件而工作目录不对就会报文件找不到。所以养成习惯把工作目录设成项目根目录数据和代码都基于这个根目录来引用能避免很多路径问题。到这一步你已经有了一个能写能跑 Python 的编辑器环境接下来就是把最重要的深度学习库装进去。4. PyTorch CPU 版安装虚拟环境是必须的PyTorch 的安装我强烈建议不要直接装在全局 Python 环境里而是给每个项目单独建一个虚拟环境。虚拟环境这个概念听起来吓人其实就是给项目划一块独立的、只有它自己能用的库空间。这样不同项目之间用到的库版本互相隔离不会打架。4.1 为什么要用虚拟环境我刚开始学的时候也觉得虚拟环境是多此一举直接全局装多省事。结果就是A 项目需要一个库的 1.0 版本B 项目需要 2.0 版本全局只有一个位置你装了 A 的版本B 就跑不了来回重装能把自己折腾疯。更严重的是当你把某个核心库升级后可能会连带影响其他库的依赖导致本来好好的项目突然跑不动了而你还想不起来自己动过什么。虚拟环境解决的正是这个问题。你为每个项目创建独立环境项目 A 的环境里装 1.0项目 B 的环境里装 2.0互不干扰。删掉项目直接把环境文件夹删了就行干净利落。对深度学习这种依赖链复杂、版本要求又比较敏感的领域来说虚拟环境几乎算是标配。Python 自带的venv模块就够用不需要额外装工具。创建和激活虚拟环境的命令大概是这样# 在项目目录下创建虚拟环境名字叫 venv python -m venv venv # Windows 激活 venv\Scripts\activate # macOS / Linux 激活 source venv/bin/activate激活之后命令行的开头会出现(venv)这样的标记表示当前所有 pip 操作都只在这个环境里生效。这一步确认好了后面装 PyTorch 才不会污染全局。在 PyCharm 里新建项目时也可以直接选择“新建虚拟环境”这样编辑器会自动帮你创建并绑定省去手动命令行的步骤两种方式都可以手动一遍能帮助你理解背后的机制。4.2 安装 PyTorch 的正确姿势现在是重头戏。PyTorch 的官网有一个安装命令生成器你选好系统、包管理方式、Python 版本、计算平台选 CPU它就会给你一条现成的命令。我强烈建议从官网生成命令不要凭记忆手写因为它的包名和索引地址是特定格式写错了会装到奇怪的东西或者报错。CPU 版的安装命令大致是这个形态具体版本号以官网当前生成为准pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu这里解释一下这三个包的分工。torch是核心库张量、自动求导、神经网络都在里面torchvision是计算机视觉相关的工具包包含常用数据集、预训练模型和图像变换工具torchaudio是音频处理相关。入门阶段你至少需要前两个第三个顺手一起装也不占多少事。命令最后的--index-url参数就是把安装源指向 PyTorch 官方的 CPU 包仓库确保装的是纯 CPU 版本而不是带 CUDA 的版本。安装过程会很慢因为包体积不小。这时候前面配置的镜像源思路就能帮上忙但要注意 PyTorch 的包不一定在所有国内镜像上都有 CPU 版的最新同步所以如果镜像源里找不到或者版本对不上就老老实实用官方源慢慢等。我个人的经验是这种大包安装找一个网络稳定的时间一次装完别装一半断了再重来中断的安装有时会留下损坏的缓存反而更麻烦。提示安装完成后用pip list看一眼确认 torch、torchvision、torchaudio 三个都在列表里且版本号符合预期。如果只有 torch 没有另外两个说明命令没执行完整补装即可。4.3 安装后的验证三步确认装完不能光看命令成功就完事一定要做验证。我习惯用三段式验证能层层确认装的东西是否真的可用。第一段确认能导入并且看版本import torch print(torch.__version__) print(torch.cuda.is_available())第二行会输出False这是正常的因为装的是 CPU 版没有 CUDA 支持。如果这里报错说没有 cuda 模块也别慌CPU 版本本来就不依赖它能正常打印版本号就说明导入成功了。第二段确认张量运算正常import torch x torch.tensor([[1.0, 2.0], [3.0, 4.0]]) y torch.tensor([[5.0, 6.0], [7.0, 8.0]]) print(x y) print(torch.matmul(x, y))能看到正确的矩阵加法和乘法结果就说明核心运算没问题。第三段确认能定义一个最简单的网络并跑一次前向import torch import torch.nn as nn model nn.Sequential( nn.Linear(10, 20), nn.ReLU(), nn.Linear(20, 1) ) out model(torch.randn(4, 10)) print(out.shape)输出形状应该是(4, 1)。这三步都通过你的 PyTorch 环境就是真正可用的了而不是“装上了但用不了”的状态。5. 环境跑通验证从张量到第一个能训练的小网络装完只是开始要让这套环境真正为你所用得跑一个完整的训练流程。我一般用经典的 MNIST 手写数字识别来做这个验收原因很实在数据小、内置在 torchvision 里自动下载、几分钟就能跑完、还能完整覆盖数据加载、模型定义、训练、评估这条链路。5.1 数据准备和加载器的写法MNIST 通过 torchvision 可以一行代码加载关键是理解DataLoader是干什么的。它负责把整个数据集按 batch 分批、随机打乱顺序、后台并行读取让训练循环每次只处理一小批数据。对 CPU 环境来说num_workers这个参数设置要谨慎Windows 上设成大于 0 有时会因为多进程机制出问题我建议先用 0稳定了再试着调。batch size 设成 64 或者 128 都可以CPU 上别设太大内存和速度都吃不消。数据下载那一步如果卡住多半是网络问题可以从网上找现成的数据集文件手动放到指定目录torchvision 检测到文件已存在就不会重复下载。这个技巧在数据量大、网络不稳的时候特别有用。5.2 一个最小可用的卷积网络我写一个极简的 CNN两层卷积两层全连接结构上足够说明问题又不会太复杂。核心要点是搞清楚每一层的输入输出维度怎么衔接卷积层输出的是多通道的特征图进入全连接层之前要先用flatten展平成一维向量而展平后的维度要和全连接层的输入维度对上这是新手最容易算错、也最容易报错的地方。如果报维度不匹配的错误八成就是这里没对上。训练循环里有几个固定动作清零梯度、前向传播、计算损失、反向传播、更新参数。这五步是 PyTorch 训练的标准骨架我从入门到现在写的大部分训练代码都是这个结构。损失函数用交叉熵优化器用 Adam学习率从 0.001 起步这些都是分类任务的常规配置。5.3 在 CPU 上的实际表现和观察跑起来之后你会看到每个 epoch 的耗时和 loss 变化。CPU 上第一个 epoch 会慢一些因为要加载数据、初始化各种东西后面会稳定下来。观察 loss 是不是在下降、准确率是不是在上升这是判断代码写没写对的最简单标准。如果 loss 一直不动或者变成 NaN那就要回头检查学习率是不是太大、数据处理是不是有问题。我这里想强调一个心态问题CPU 上训练慢不要急着换设备先确认你的代码逻辑是对的。环境搭建和代码正确性跟硬件快慢是两码事。你能用 CPU 把一个小网络正确训练到收敛就说明整条链路你都掌握了剩下的只是速度差异。这个阶段积累的信心和方法比省下来的那点训练时间值钱得多。6. 常见问题排查与踩坑经验讲完了流程最后这部分是我觉得最有价值的地方因为这些坑不是教程里会写的都是我自己一次次撞出来的。6.1 高频问题速查表报错或现象可能原因处理方向命令行 python 找不到PATH 没配检查环境变量里的 Python 目录和 Scripts 目录pip 装了 PyCharm 里没有解释器不一致在 PyCharm 里重新绑定到同一个解释器pip 安装超时失败网络源问题配置国内镜像源或换时间重试import torch 报错装到了别的环境确认虚拟环境已激活再装、再导入训练时报维度不匹配全连接输入维度算错打印展平后的 shape 再对应改loss 变成 NaN学习率过大或数据未归一化降低学习率、检查输入数值范围多进程加载卡死Windows 下 worker 机制把 num_workers 设成 0表格里每一条我都亲身遇到过其中解释器不一致和维度不匹配这两条新手撞上的频率最高。解释器那条尤其隐蔽因为你明明在命令行验证过库能用到了编辑器里就不行很容易怀疑人生。6.2 几条教程不会写的经验第一条经验关于虚拟环境。我现在的习惯是每个项目一个独立虚拟环境绝不偷懒。早期图省事全局装后来环境一乱排查问题的时间比建十个虚拟环境加起来还多。建环境的成本很低命令行一行命令或者 PyCharm 里点几下但这个习惯能帮你省下大量“这库怎么突然用不了了”的困惑时间。第二条经验关于版本记录。装完环境之后我会导出一份依赖清单pip freeze requirements.txt这个文件记录了当前环境所有包的精确版本。好处是当你换了机器、或者把项目分享给别人直接pip install -r requirements.txt就能复刻一个完全一样的环境不会出现“在我这能跑在你那报错”的经典问题。养成这个习惯对以后协同开发帮助极大。第三条经验关于报错信息。新手看到红色报错容易慌其实大部分报错的最后一行才是真正的关键。看报错要倒着看先看最后一行的错误类型和信息再往上追溯是哪一行代码触发的。把这个习惯建立起来你自己就能解决绝大多数问题而不是遇到报错就到处问人。第四条经验关于学习路径。环境搭好之后不要一头扎进复杂的项目先找几个小的、能跑通的例子把数据加载、模型定义、训练循环、评估这个流程反复走几遍走到你不用查资料就能写出来的程度。深度学习这门东西动手跑通的收益远大于看视频看教程。我见过太多人收藏了一堆教程却从没真正跑起过一个模型而真正拉开差距的就是那条从“环境搭好”到“亲手跑通第一个网络”的路。环境这一关你过了后面才是真正有趣的部分。