news 2026/9/30 8:16:32

零显卡深度学习环境搭建:Python、PyCharm与PyTorch CPU版

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
零显卡深度学习环境搭建:Python、PyCharm与PyTorch CPU版

1. 先把路线定下来:这套深度学习环境到底装了什么

搞深度学习环境搭建这件事,说难不难,说简单也确实能把人卡一整天。Python、PyCharm、PyTorch CPU 版这三个东西单独拿出来装,任何一个都不会让你抓狂,但把它们串成一条能跑通的链路,中间的解释器路径、包依赖、虚拟环境归属、IDE 绑定,每一个环节都能出问题。我前后在 Windows 和 Linux 上装过不下二十次这套组合,踩过的坑基本能覆盖新手会遇到的所有报错,所以这篇就把完整流程和我自己的处理习惯一次讲透。

这套环境解决的核心问题很直白:让你在一台没有独立显卡、也不想折腾驱动的机器上,把深度学习代码真正跑起来。Python 负责语言运行时,PyCharm 负责写代码和调试,PyTorch CPU 版负责提供张量运算、自动求导和神经网络模块。只要这三者版本对得上、解释器绑得准,你就能从“装环境”阶段直接进入“写模型”阶段,不用再去研究 CUDA 版本和显卡驱动的对应关系。

适合看这篇的人大致有三类:刚入门、连 Python 都还没装过的同学;装过 Python 但被 PyCharm 解释器搞晕的同学;以及手上有台办公本、只想先把算法逻辑跑通、暂时不碰显卡加速的同学。第三类其实最多,CPU 版跑小规模卷积网络、跑张量运算、验证论文里的公式,速度完全够用,没必要一上来就给自己加难度。

1.1 三个组件各自负责什么,别搞混

很多人装环境装到一半会迷糊,是因为没分清这三个东西的边界。Python 是地基,你写的所有.py文件最终都由它来解释执行,pip也归它管。PyCharm 是壳子,它自己不执行任何计算,只是调用你指定的那个 Python 解释器去跑代码,所以 PyCharm 里配置解释器这一步,本质是在告诉 IDE“请用这个 exe 去运行我的文件”。PyTorch 是库,装在某个具体的 Python 环境里,只对那个环境可见。

理解了这个层次关系,很多报错就变得好解释了。比如 PyCharm 里import torch报ModuleNotFoundError,八成是因为你在命令行里把 torch 装到了系统 Python,而 PyCharm 项目用的是虚拟环境里的 Python,两者不是同一个解释器。再比如命令行能跑、PyCharm 不能跑,反过来也一样,本质都是解释器不一致。

提示:判断解释器是否一致的唯一标准是路径,不是名字。sys.executable打印出来的那个路径,才是真相。

1.2 为什么这次刻意选 CPU 版

CPU 版 PyTorch 最容易被低估。它没有 CUDA 依赖,装完就是能跑,不用管显卡型号、不用管驱动版本、不用管 CUDA 和 cuDNN 的匹配矩阵。对于一个刚上手的人来说,先把nn.Conv2d、nn.Linear、反向传播这些概念跑通,比折腾环境死活装不上要有价值得多。

性能上也不用太悲观。现在的 CPU 版本会调用 MKL 或者 OpenMP 做多线程加速,矩阵运算效率并不低。跑一个几万参数的小卷积网络做手写数字识别,CPU 上几十秒一个 epoch 是很正常的事。真正需要显卡的场景是参数量到千万级、数据量到几十万张以上,那个阶段你再换 GPU 环境也不迟,而且换的时候只需要换安装命令,代码基本不用动。

另外还有一点很实际:笔记本用 CPU 跑训练,风扇声可控,电池撑得住,不会出现显存不够的报错。做教学演示、写课程作业、验证算法思路,CPU 版是性价比最高的起点。

1.3 版本策略:什么时候该锁死版本

我的习惯是:Python 选一个还在维护期的主版本,小版本选最新;PyTorch 选官网当前稳定版;PyCharm 用最新的社区版。原因很简单,这三者的兼容性由官方维护,你只要不选过老的版本,基本不会遇到兼容性断裂。

但有两种情况我会主动锁版本。第一种是复现别人的项目,requirements.txt里写死了torch==1.13.1这种,那就照着装,别自作聪明升级。第二种是学校里统一的教学环境,老师给的版本号就是标准答案,跟着走最省事。

需要特别提醒的是,PyTorch 2.x 之后对 Python 版本有下限要求,装之前先看一眼官方安装页面上写的支持范围。如果你用的是比较老的系统,比如某些还在服役的旧笔记本,Python 版本上不去,那 PyTorch 也得跟着往下选,这是唯一需要逆向推导的地方。

2. Python 安装:后面所有的坑几乎都从这里埋下

Python 安装这一步,绝大多数教程都是一句“下一步下一步”带过,但我实际帮人排查问题时,十次里有六次的问题根源在这一步。要么是安装时没勾 PATH,要么是路径里带了中文和空格,要么是装了三四个版本自己都记不清哪个是哪个。花五分钟把这一步做干净,后面能省两小时。

2.1 安装包从哪拿,安装器怎么勾

安装包只从官网拿,搜索的时候认准 python.org 这个域名,别去各种下载站,那些站点捆绑安装的东西能让你怀疑人生。进官网后选 Windows 的 installer,注意区分 32 位和 64 位,现在基本都用 64 位。下载页面上通常有两个安装包,一个是带 web 字样的小体积在线安装器,一个是几十兆的完整离线包。

我一般推荐离线包,网络不好时不会装到一半失败。双击之后,安装器第一屏有两个复选框,下面那个写的是 Add python.exe to PATH,这个必须勾。勾了它,你才能在命令行里直接敲python就能进解释器,否则每次都得手打完整路径。上面那个 Install launcher for all users 建议也勾上,它提供py这个命令,用来在多版本之间切换非常方便。

然后不要直接点 Install Now,点下面的 Customize installation。进去之后 Optional Features 那一页默认全勾就行,包含 pip、IDLE、文档和测试套件。真正要看的是 Advanced Options 那一页,有几个关键项:

选项建议说明
Install Python 3.x for all users按需勾了装到 Program Files,需要管理员权限,多用户共用时勾
Add Python to environment variables必勾等价于首页的 PATH 选项
Associate files with Python建议勾双击 .py 文件会用 Python 打开
Create shortcuts for installed applications建议勾开始菜单里方便找
Precompile standard library建议勾第一次导入模块更快

最关键的是安装路径。默认会装在用户目录下的 AppData 里,路径长且带隐藏目录,看着难受。我习惯改成C:\Python312这种短路径,全英文、无空格、无中文。这一点在后续装某些需要编译的库时能救你一命,因为路径里的空格会让一部分构建脚本解析出错。

注意:安装路径绝对不能出现中文。中文路径导致的问题往往不是立刻报错,而是某个库在运行时静默失败,或者加载模型文件时报编码错误,排查起来极其折磨。

2.2 三条命令验证装没装好

装完之后别急着开 PyCharm,先把命令行开出来验证。按 Win+R 输入 cmd,或者用 PowerShell,依次敲下面三条:

python --version pip --version where python

第一条应该输出类似Python 3.12.4的版本号。如果提示“不是内部或外部命令”,说明 PATH 没生效。先别急着重装,最可能的原因是安装完之后没有重开命令行窗口,环境变量是进程启动时读取的,老窗口读不到新值。关掉重开还不行,就手动去系统环境变量里把 Python 安装目录和它下面的 Scripts 目录加进 Path。

第二条输出 pip 的版本和它对应的 Python 路径。这里有个细节值得看:pip 输出的路径应该和你 Python 的安装路径一致。如果 pip 指向的是另一个 Python,说明你机器上有多个版本,PATH 顺序有问题。

第三条where python会把系统里所有能找到的 python.exe 都列出来,按 PATH 顺序排列,排在最上面的就是命令行实际调用的那个。这个命令在多版本环境下是我用得最多的排查工具,一眼就能看出当前生效的是哪个。

2.3 多版本共存怎么办

如果你之前装过 Python 2.x 或者别的版本,现在机器上有两三个,我的建议是不要急着卸载旧的,用py启动器管理就行。py -0会列出所有已注册的版本,py -3.12就能指定用 3.12 启动。装上 py 启动器之后,多版本共存反而比单版本更好管理。

还有一个高频问题:pip 装了包但 import 找不到。这几乎都是因为pip命令对应的 Python 和python命令对应的 Python 不是同一个。解决办法是用模块方式调用,写成python -m pip install xxx,这样能保证 pip 一定装到当前这个 Python 下。这个写法我从开始就养成了习惯,几年下来省了无数麻烦,强烈建议你也这么用。

3. PyCharm 落地:解释器绑不对,等于白装

Python 装好了,接下来是 PyCharm。这一步的核心任务只有一个:让你在 IDE 里点运行的时候,用的是你刚装好的那个 Python。其他所有设置都是锦上添花。

3.1 社区版够不够用,说清楚

官网上下载页面会给两个版本,社区版和专业版。社区版免费,专业版需要商业授权。对于纯 Python 开发、跑 PyTorch 训练脚本这件事来说,社区版完全够用,代码补全、调试器、断点、变量查看、内置终端、版本控制这些核心能力全都在。

专业版多出来的是 Web 框架支持、数据库工具、远程解释器、部分科学计算的可视化面板这些东西。日常做深度学习实验,用得上的概率不高。如果你是学生,可以走官方的教育授权渠道申请免费使用专业版;企业环境请通过正规授权渠道获取,用破解补丁或者来路不明的注册方式,风险不只是法律层面,那些被改过的可执行文件本身就可能是安全后门。

我的建议很直接:先用社区版把环境跑通,等你真的遇到社区版解决不了的问题,再考虑升级。

另外提一句,现在也有不少人用 VS Code 配 Python 插件,同样能跑通这套环境,配置思路和 PyCharm 是一样的,都是绑解释器。选哪个看个人习惯,不影响后面任何内容。

3.2 新建项目时把解释器绑对

安装 PyCharm 的过程没什么好说的,一路下一步,安装路径同样建议纯英文。第一次打开会让你选主题、装插件,全部按默认走就行,插件以后随时能加。

真正的关键在新建项目这一屏。Location 填项目目录,同样是纯英文路径。下面有个 Python Interpreter 区域,默认可能会给你推荐一个叫 Virtualenv 的新环境,位置在项目目录下的.venv文件夹里。这个默认行为其实是好事,我在 4.1 节会详细讲为什么。

如果你已经有现成的解释器想直接用,就展开解释器下拉框,选 Add Local Interpreter,在弹窗里选 System Interpreter,然后浏览到你的python.exe。选完之后点 OK,项目就会用这个解释器。

还有一种情况是从别处拿到一个已有项目,PyCharm 打开后右下角会提示没有配置解释器。这时候点右下角的解释器状态栏,走同样的流程配置一遍就行。别忘了 PyCharm 有时会缓存旧配置,配置完还是报错的话,File 菜单里有个 Invalidate Caches 的选项,清一下重启,绝大多数玄学问题都能解决。

3.3 上手先改的几个默认设置

装完就用的默认配置,有几个地方我每次都会改。第一个是编码,Settings 里搜索 File Encodings,把 Global Encoding 和 Project Encoding 都设成 UTF-8。这个在国内环境里特别重要,不然读中文文件或者写中文注释时可能出乱码。

第二个是字体和字号,默认的行高对长时间看代码不太友好,改成 14 到 16 号,行距调宽一点,眼睛会舒服很多。第三个是把内置终端调出来,Alt+F12,所有 pip 命令我都在这个终端里敲,这样它自动激活的就是项目当前的虚拟环境,不会装错地方。

再分享一个习惯:在项目根目录建一个requirements.txt,每装一个新库就往上加一行。等你换电脑或者重装系统的时候,一条命令就能把环境恢复。这个小动作刚开始做没什么感觉,等到你需要复现三个月前的实验时,你会感谢自己。

4. PyTorch CPU 版安装:虚拟环境和依赖链

终于到正题。前面铺垫这么多,是因为 PyTorch 安装是整条链路的最后一环,前面任何一步没做对,都会在这里以各种奇怪报错的形式爆发。

4.1 为什么我坚持每个项目一个虚拟环境

虚拟环境这个东西,新手最容易觉得是多余步骤,但它解决的是 Python 生态里最真实的痛点:不同项目依赖不同版本的库。比如你上个月的项目要用numpy 1.x,这个月的新项目要求numpy 2.x,全局安装的话两者只能二选一,装了这个那个就崩。

虚拟环境把每个项目的依赖隔离在各自目录里,互不干扰。PyCharm 新建项目时默认创建的.venv目录就是干这个的,创建过程也就几秒钟。

手动创建也简单,在项目目录下打开命令行:

python -m venv .venv

Windows 上激活用:

.venv\Scripts\activate

激活成功后,命令行提示符前面会多一个括号,里面是环境名。这时候你敲where python,指向的就是.venv里的 python,而不是系统的那个。这一步是判断环境激活成功与否的硬标准。

提示:虚拟环境目录不要提交到版本库,也不要在多个项目之间复制粘贴。它里面记录的路径是绝对路径,换个位置就可能失效,重建一个比修复一个快得多。

如果你习惯用 Anaconda,逻辑是一样的,用conda create -n dl_cpu python=3.12建环境,然后conda activate dl_cpu。Conda 装 CPU 版 PyTorch 的命令是conda install pytorch torchvision torchaudio cpuonly -c pytorch。两种方式二选一,不要混着用,混用最容易出现装了却 import 不到的情况。

4.2 安装命令逐段拆解

PyTorch 官网的安装页面会给你一个生成好的命令,选好系统、包管理器、语言和计算平台之后复制出来就行。CPU 版本对应的命令长这样:

python -m pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu

这行命令里三个部分值得说清楚。python -m pip前面讲过了,保证装到当前解释器。torch torchvision torchaudio三个包分别对应核心张量库、计算机视觉工具包、音频处理工具包,如果你只做图像和通用模型,torchvision建议装上,torchaudio用不到可以不装。最后的--index-url是指定从 PyTorch 官方的 CPU 专用仓库下载,这里面的包是编译好的 CPU 版本,不会把 CUDA 那一大堆依赖拖下来。

为什么必须指定这个索引地址?因为默认的 PyPI 源上,Windows 平台拿到的torch包体积会非常大,因为它捆绑了 CUDA 相关的内容。指定了 cpu 索引,下载的是精简版,以 2.x 为例,下载包是两百多兆的量级,装好之后加上依赖通常占用一到两个 GB,给磁盘留出 5GB 余量比较踏实。

有些同学会先换国内镜像源来加速。这里要注意,普通的 PyPI 镜像(比如清华的 tuna 源、阿里云源)不一定同步了 PyTorch 的 CPU 专用包,混着用可能出现版本对不上或者找不到包的情况。稳妥做法是:PyTorch 就用官方索引装,其他库再用国内源,命令分开敲。比如装 numpy、matplotlib 这类库的时候加-i https://pypi.tuna.tsinghua.edu.cn/simple就行。

如果官方索引下载过程中断流,可以先把 pip 的超时时间调长,加上--timeout 1000,然后重试。断点续传在 pip 上是默认行为,重试的时候已下载的部分不会白费。

安装之前记得升级一下 pip,老版本 pip 对新版 wheel 格式的支持可能有问题:

python -m pip install --upgrade pip

4.3 装完必须做的四项验证

装完之后不要急着庆祝,先跑验证。可以新建一个check_env.py,内容如下:

import sys import torch import torchvision print("Python:", sys.version) print("解释器路径:", sys.executable) print("PyTorch:", torch.__version__) print("TorchVision:", torchvision.__version__) print("CUDA 可用:", torch.cuda.is_available()) print("可用线程数:", torch.get_num_threads()) x = torch.randn(3, 4) y = torch.randn(4, 2) print("矩阵乘法结果形状:", (x @ y).shape)

这六行输出把该确认的都确认了。解释器路径要和你在 PyCharm 里配的一致;torch.cuda.is_available()输出False是正常的,CPU 版本就该是 False,如果是 True 反而说明装成了 GPU 版本;矩阵乘法能算出(3, 2)的结果形状,说明底层运算链路是通的。

这四项里,我最看重的是解释器路径。很多同学装完一切正常,结果在 PyCharm 里跑就是 import 失败,问题基本都在这里。命令行验证通过、PyCharm 里失败,那就把 PyCharm 的解释器设置打开看一眼路径,对不上就改过来。

5. 环境验收:用两段代码跑通完整闭环

环境装完了,但“装完”和“能用”是两回事。我习惯用两段代码做验收,第一段验证张量和自动求导,第二段跑一个极小的卷积网络,两段都过了,这个环境才算真的可用。

5.1 张量基础与自动求导验证

先来一段最基础的,把张量创建、形状变换、广播、自动求导这几个核心概念都过一遍:

import torch # 从列表创建,指定类型 a = torch.tensor([[1.0, 2.0], [3.0, 4.0]], dtype=torch.float32) print("a 的形状:", a.shape, "数据类型:", a.dtype) # 全零、全一、随机 print(torch.zeros(2, 3)) print(torch.ones(2, 3)) print(torch.randn(2, 3)) # 形状变换 b = a.view(4) print("展平后:", b) c = a.reshape(1, 4) print("reshape 后:", c.shape) # 广播机制 row = torch.tensor([10.0, 20.0]) print("广播相加:", a + row) # 自动求导 w = torch.tensor([2.0], requires_grad=True) loss = (w ** 2 + 3 * w).sum() loss.backward() print("w 的梯度:", w.grad)

最后一行输出应该是 7,因为对 w 求导得到 2w+3,代入 w=2 就是 7。这个值能对上,说明反向传播的整个链路是通的。

这里有个新手容易混淆的点:view和reshape的区别。view要求张量在内存里是连续的,reshape会在必要时先复制一份再变换形状,更宽容。日常写代码我基本都用reshape,省得去操心连续性。另外一个高频坑是原地操作,a.add_(1)这种带下划线的写法会修改原张量,如果这个张量后面还要参与求导,可能触发计算图报错,调试的时候要留意。

5.2 一个能跑起来的小卷积网络

第二段代码我用随机数据造一个迷你卷积网络,不依赖任何数据集下载,纯粹验证前向、反向、参数更新这条链路:

import torch import torch.nn as nn import torch.optim as optim class TinyCNN(nn.Module): def __init__(self, num_classes=10): super().__init__() self.features = nn.Sequential( nn.Conv2d(3, 8, kernel_size=3, padding=1), nn.ReLU(), nn.MaxPool2d(2), nn.Conv2d(8, 16, kernel_size=3, padding=1), nn.ReLU(), nn.AdaptiveAvgPool2d(1) ) self.classifier = nn.Linear(16, num_classes) def forward(self, x): x = self.features(x) x = torch.flatten(x, 1) return self.classifier(x) device = torch.device("cpu") model = TinyCNN().to(device) criterion = nn.CrossEntropyLoss() optimizer = optim.Adam(model.parameters(), lr=1e-3) inputs = torch.randn(16, 3, 32, 32).to(device) targets = torch.randint(0, 10, (16,)).to(device) for step in range(5): optimizer.zero_grad() outputs = model(inputs) loss = criterion(outputs, targets) loss.backward() optimizer.step() print(f"第 {step+1} 步, loss = {loss.item():.4f}") print("参数量:", sum(p.numel() for p in model.parameters()))

这段代码在纯 CPU 上跑,五步迭代基本是秒出结果。注意AdaptiveAvgPool2d(1)这个操作,它把任意尺寸的特征图压成 1x1,这样全连接层的输入维度就固定了,不用手算卷积之后的尺寸。这是我自己写小网络时的偷懒技巧,能省掉一大串尺寸推导。

关于数据形状,PyTorch 卷积层要求的是(N, C, H, W),也就是批大小、通道数、高、宽。如果你从 PIL 或者 OpenCV 读进来的图像是(H, W, C),需要先转成张量再调整维度顺序,用permute(2, 0, 1)就行。这个顺序问题在第一次接触图像任务时几乎人人都会踩,报错信息通常是维度不匹配,看到这类报错先检查形状。

5.3 CPU 上跑得更快的一些小手段

既然用的是 CPU,有些调优手段值得知道。第一是控制线程数,默认 PyTorch 会用上所有核心,但在某些机器上线程开太多反而会因为调度开销变慢:

torch.set_num_threads(4)

具体数字需要在你自己机器上试,一般设成物理核心数或者物理核心数的一半比较合适。第二是批大小,CPU 上没有显存限制,但批太大反而会让内存带宽成为瓶颈,从小批开始试,逐渐加倍,找到那个耗时增长开始不线性的点。第三是数据类型,训练结束后做推理的时候,可以用model.eval()加上torch.no_grad(),能省下大量内存和计算。

还有一点,如果你用的是 Intel 较新的处理器,PyTorch 会通过 MKL 自动利用 AVX 指令集加速,这个不需要额外配置。可以留意一下装上之后矩阵运算的实际速度,如果发现比预期慢很多,检查一下是不是不小心装成了带 CUDA 依赖的版本,那种版本在无显卡机器上反而会拖慢启动。

6. 常见故障排查与踩坑记录

环境搭建的价值有一半在排查能力上。下面这些是我这几年被问得最多的问题,整理成速查表,遇到报错先扫一遍,能省下大量搜索时间。

6.1 问题速查表

报错现象最可能的原因处理方式
'python' 不是内部或外部命令PATH 未生效重开命令行窗口,仍不行则手动加环境变量
pip install成功但import torch失败pip 和 python 不是同一个解释器改用python -m pip install重装
PyCharm 里报 ModuleNotFoundError,命令行正常IDE 解释器指向系统 Python检查项目解释器路径,改成.venv里的
安装 PyTorch 时卡住或超时网络中断或超时设置太短加--timeout 1000重试,利用断点续传
ImportError: DLL load failed缺少系统运行库安装 Microsoft Visual C++ 运行库,重启后重试
导入 numpy 相关报错numpy 大版本不兼容按 PyTorch 版本的兼容要求装对应 numpy
内存占用飙升、程序被系统杀掉批大小或数据量过大减小批大小,用 DataLoader 分块加载
训练速度极慢线程数设置不合理用torch.set_num_threads调整后实测对比
PyCharm 配置改了不生效缓存未刷新清理缓存并重启 IDE
中文路径下运行异常路径含非 ASCII 字符项目和环境全部移到纯英文路径下

这张表里,前三行覆盖了实际遇到的八成问题。特别是第一行和第二行,看起来很蠢,但每一次帮人排查,最后都落在这两个点上。

关于 DLL load failed,补充一句。这个报错在 Windows 上出现频率不低,根本原因是 PyTorch 的底层二进制依赖了系统的 C++ 运行库,而某些精简版系统没有预装。解决办法就是去官网下载最新版的 Visual C++ Redistributable 装上,装完重启一次。不要试图通过降级 PyTorch 来绕过这个问题,那是治标不治本。

关于 numpy 兼容性,现在的 PyTorch 2.x 对 numpy 2.x 的支持已经比较完善了,但如果你的项目里有别的老库依赖 numpy 1.x,两边会打架。稳妥做法是先装 PyTorch,让它自己挑依赖版本,再装其他库,出现冲突时 pip 会给出提示,按提示降级就行。

6.2 几条文档里不会写的经验

第一条是我最想强调的:所有东西都放纯英文路径下。项目目录、Python 安装目录、虚拟环境目录、数据集存放目录,全部英文加数字加下划线。中文路径引发的问题往往不在安装阶段爆发,而是在你读数据集或者保存模型的时候突然出现,报错信息还特别难懂。我见过最离谱的一次是模型能训练但保存失败,排查了半天才发现是路径里两个字的问题。

第二条是关于环境的可复现性。养成随手记录的习惯,每装一个库就更新requirements.txt。我一般用python -m pip freeze > requirements.txt直接导出当前环境的全部依赖和版本号,换成新机器的时候python -m pip install -r requirements.txt一把装回来。这个习惯能让你在换电脑、重装系统、帮同学配环境时,效率提升一个量级。

第三条是关于“重装大法”。环境出问题的时候,新手容易陷入一个误区,就是拼命在原环境上修。我的经验是,如果一个报错你排查超过半小时还没头绪,直接删掉.venv重建一个环境,重新装一遍依赖。建环境加装 PyTorch 在网速正常的情况下也就五分钟,比继续折腾要有性价比得多。这不是逃避问题,是效率选择。

第四条是关于版本记录。每次搭好一个能用的环境,我会在项目根目录写一个简短的 README,记下 Python 版本、PyTorch 版本、几个关键库的版本和安装命令。三个月后你回头看,这份记录的价值远超你写它花的两分钟。

注意:不要把全局 Python 环境当成实验田。任何python -m pip install之前,先确认命令行提示符前面的环境名是不是你想要的。我有过把一堆实验性依赖装进系统 Python,后来导致另一个正经项目跑不起来的经历,清理起来非常麻烦。

最后分享一个我在实际使用中的体会。刚入门那段时间,我总觉得环境搭建是个没有技术含量的杂活,恨不得找个一键脚本糊弄过去。后来才慢慢意识到,搭建环境的过程本身就是在建立对整个工具链的认知。你知道了 Python 和 pip 的关系,知道了 IDE 只是个壳子,知道了虚拟环境为什么存在,这些东西在你后面遇到依赖冲突、部署上线、容器化打包这些问题时,会一遍遍地派上用场。把这一步走扎实,收益远不止“能跑代码”这么简单。

后面如果算力不够用了,要上 GPU,那也只是把安装命令里的索引地址换成对应 CUDA 版本的地址,代码里把设备改成cuda,其余流程和今天走的这一套完全一致。所以这套 CPU 环境不是权宜之计,而是一个可以平滑升级的起点。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/30 8:15:25

ArcGIS属性查询100条公式:SQL表达式、报错与优化

1. 属性查询这件事,90%的人只用到了皮毛干这行十来年,我发现一个挺有意思的现象:身边不少同事能把空间分析、模型构建器、栅格计算器玩得很溜,但一到"按属性选择"那个对话框,敲出来的公式永远是字段 某值这…

作者头像 李华
网站建设 2026/9/30 8:15:25

MySQL索引策略全解:从慢查询优化到覆盖索引实战

前阵子帮朋友排查一个生产库的问题:一张快两千万行的订单流水表,按用户ID查最近三个月的订单,接口平均耗时2.4秒,慢查询日志里几乎每秒钟都在刷这条语句。我看了眼建表语句,user_id连索引都没有,主键是自增…

作者头像 李华
网站建设 2026/9/30 8:15:08

从零构建AI工程能力:数据管道、训练稳定性与推理部署实战

1. 这个项目到底在解决什么问题 第一次看到 ai-engineering-from-scratch 这个标题,我脑子里蹦出来的第一个念头是:终于有人把这件事拎出来单独讲了。过去两年,市面上讲 AI 的内容基本分成两拨——一拨是调 API 的应用层教程,教…

作者头像 李华
网站建设 2026/9/30 8:13:36

MATLAB/Simulink配电网潮流仿真:IEEE 13节点馈线建模实战

一看这个标题,就知道是同道中人。配电网潮流计算和输电网完全是两码事,能在MATLAB/Simulink里把IEEE 13节点馈线跑明白,那对三相不平衡系统、电压调节器、恒功率负荷这些配电网核心概念,基本就摸到门道了。网上关于这个题材的资料…

作者头像 李华