Ubuntu 20.04 安装 CPU 版 PyTorch 实战:避开 Python 版本与 pip 暗坑
一直用Windows跑深度学习模型的人初次转到Ubuntu 20.04上配PyTorchCPU版时可能会觉得这能有多难无非是pip install顶多再装个Anaconda而已。但我当时实际动手才发现坑远比我以为的多python命令前面要不要加3、pip到底带着哪个解释器、系统自带的Python 3.8和后来装的Python 3.10抢来抢去、cuda版本的包默认附带一堆用不到的东西……没有一个能省心。这篇东西不是从网上抄来的安装步骤复读而是我在Ubuntu 20.04上装CPU版PyTorch时实际踩过的坑和绕出来的路适合刚转Linux做深度学习、选CPU版过渡学习、以及正在为环境问题焦头烂额的人。1. 环境准备阶段最容易埋雷Python版本冲突大多数人第一反应是直接用系统自带的Python装PyTorch但Ubuntu 20.04的默认Python情况其实是很多坑的根源。1.1 先看清你的默认Python到底是谁Ubuntu 20.04默认自带的是Python 3.8。这个版本本身没有大问题但麻烦在系统的一些底层工具比如自带的软件管理、部分桌面组件也依赖这个Python。直接拿它来pip install PyTorch系统环境一旦被装乱轻则部分图形界面程序出现怪毛病重则系统包管理器瘫痪。我建议先执行以下命令看清楚which python which python3 python --version python3 --version这一段有一个非常容易踩的坑Ubuntu默认不提供python这个命令而是只有python3。在Windows上输入python已经习惯了在Ubuntu里输入python终端通常会告诉你找不到命令。如果你强行用apt install python装下来的大概率是Python 2的某个残留或者一个软链接非常迷惑。我当时就是在这里浪费了快半小时。明明python3.8可用python却提示不存在我一度以为自己的系统被弄坏了。这个事其实在Ubuntu 20.04里非常正常因为系统只保留了python3的入口。后续一切用python3来指代即可或者用虚拟环境后直接用python。1.2 一个干净的Anaconda环境能帮你规避一大半问题与其在系统Python上反复试探我推荐直接用Miniconda或者Anaconda单独建一个环境。理由很实在系统Python是给系统用的你的项目环境和它混在一起是Linux下最常见的环境事故来源。PyTorch对Python版本有一定要求单独环境里想用Python 3.9、3.10还是3.11随时切换不用心惊胆战。虚拟环境里不需要sudo权限问题直接少了一大截。我自己的习惯是装Miniconda而不是完整的Anaconda前者更轻量不需要的一堆预装库没有也省心。命令也就是:wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh bash Miniconda3-latest-Linux-x86_64.sh装完以后创建一个专门给PyTorch用的环境conda create -n torch_cpu python3.9 conda activate torch_cpu这里选择Python 3.9作为初装版本理由是它和Ubuntu 20.04的兼容度很高同时PyTorch的二进制包支持毫无问题。如果你后面需要用新一点的深度学习库再升级也没关系关键是先把一个稳定干净的底子打好。2. 第一波真正的坑pip 到底是谁家的pip创建好conda环境并激活之后很多人直接开始pip install torch。但我告诉你此处是cpu安装过程中一个隐蔽陷阱的高发区。2.1 激活了环境pip却可能仍指向系统在Ubuntu里最常见的问题就是你明明conda activate torch_cpu激活了环境但敲pip install torch的时候系统给你执行的其实是全局的/usr/bin/pip或者是某个旧版本Python自带的pip。最稳的检查方式which pip which pip3 pip --version如果在激活的conda环境里敲pip但返回路径中出现/usr/bin/pip字样说明环境变量的优先级有问题。常见原因是没有彻底conda init或者你的shell配置文件.bashrc里写死了某个pip路径。解决方式很简单先执行conda init bash source ~/.bashrc然后重新打开终端conda环境的前缀会出现在提示符前面。此时再检查which pip就应该指向你环境目录下的bin/pip了。2.2 另一个坑pip3和pip的Entry Point不一致就算pip看起来对了有时候你实际用的还是一个问题。我第一次在Ubuntu 20.04装的时候明明which pip显示的是conda环境路径但执行pip install torch之后却提示“Defaulting to user installation because normal site-packages is not writeable”。这个提示就非常坑它说明pip虽然在conda环境里但它的用户安装目录却被导向了系统的site-packages。说白了就是这套环境没有配置干净。我用两条命令治标兼治本python -m pip --version python -m pip install torch --user注意这个python -m pip的写法是更靠谱的因为它是显式使用当前环境的python来解释执行pip模块彻底绕开各种shims和软链接。其实如果你只用pip install就已经很顺也可以不写--user但一旦出现权限报错就要意识到环境联动出了问题而不是硬着头皮装。2.3 网络源的问题在国内网络环境下直接从默认的PyPI源下载大体积的PyTorch包慢到让你怀疑人生。一个两三GB的包下到一半断了再重来一遍真的很浪费生命。用国内镜像源如清华、阿里云、中科大基本是刚需。我个人的推荐是使用清华源但最好只对当前的pip命令生效不要全局修改配置文件这样既不影响以后其他需求也更可控。pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple顺便提醒一下有些源的同步存在滞后问题你有可能在清华源上看到一个次新版本而非最新版。如果对版本有硬性要求可以直接指定版本号pip install torch2.1.2 -i https://pypi.tuna.tsinghua.edu.cn/simple3. 最重要的一步cpu版本的包名到底怎么回事这个坑我见过太多人栽过装CPU版PyTorch却执行了pip install torch结果装下来的默认版本仍然带了CUDA支持。3.1 为什么默认包还是带CUDAPyTorch官方在PyPI上的torch包默认是包含CUDA依赖的哪怕你机器上根本没有NVIDIA显卡也不影响它把那一大堆CUDA库塞进你的环境。其后果是安装包体积极大、下载时间极长、磁盘占用极高。我最初在没看文档的情况下直接pip install torch装完之后一个环境占了5个多GB而真正用到的CPU推理功能根本不需要这一大堆东西。我后来有一次在一个没显卡的机器上做部署测试发现默认安装的torch包内部带着libcusparse等等一溜下来全是和GPU相关的库文件。问题是它们根本不是为我服务的也派不上用场。3.2 正确做法加上CPU标志从PyTorch官网的安装命令选择CPU版本来看最标准的命令是走PyTorch的官方源pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu这里--index-url是指定包下载来源不是普通的PyPI源而是PyTorch自己为各个平台和计算平台预编译好的whl仓库。这个仓库里对应cpu平台的包才是真正精简的CPU版本。我后来清理掉原来的默认版torch重装成官方源的CPU版本后环境体积直接降到了3GB左右。下载速度和安装时间都改善非常明显。3.3 CPU版本到底损失了什么很多人误以为CPU版PyTorch就是“阉割版”其实不完全对。你损失的只是GPU加速模块和对应的CUDA组件而PyTorch本身的张量计算、神经网络构建、推理支持都在。对于学习、跑小型模型、调试代码来说功能上基本没有差别。唯一需要留意的是有些模型库会在依赖安装时强行把带CUDA的torch再拉回来此时需要你手动重新装回CPU版本。如果你是装了GPU版发现不对再换CPU版我建议先彻底卸载干净把torch相关的包全部删掉再安装不然一些残留的. so库会混淆。pip uninstall torch torchvision torchaudio -y卸载干净后再执行CPU源的安装命令这样能避免很多莫名奇妙的导入冲突。4. 安装完成还不是终点import torch那一刻还有惊喜pip安装没有报错并不代表万事大吉。我第一次执行import torch时就直接迎来一个红色大报错当时一度以为自己的系统彻底废了。4.1 找不到libGL.so.1的那一幕在Ubuntu 20.04上跑import torch如果系统提示报错找不到libGL.so.1别慌这是CV相关库如torchvision的底层依赖缺系统库的问题和Python代码本身没关系。这个问题的根源是系统OpenGL库版本不匹配解决办法是安装对应的系统库sudo apt update sudo apt install libgl1 libglib2.0-0也可以顺便安装libegl1有些依赖它的场景也能一次性解决sudo apt install libegl1如果import时报错“libgomp.so.1: cannot open shared object file”再补一个sudo apt install libgomp1这类问题属于典型的“Linux底层动态库缺失”不看日志永远猜不到原因。它的排查方式其实也不难所有的报错都会写着“cannot open shared object file”用apt-file search去查对应的包名再安装就好。不过对新手而言直接按上面几个包名装一遍基本都能覆盖常见情况。4.2 验证CPU版是否真的生效装完之后我建议做以下验证一项项确认环境健康python -c import torch; print(torch.__version__) python -c import torch; print(torch.cuda.is_available())如果输出版本号正常且torch.cuda.is_available()返回False恭喜你装到的是CPU版。凡是返回True的说明你装到的还是带CUDA的版本需要按前面的步骤重新来过。我最开始装完cuda.is_available()返回的是True但我机器上根本没有NVIDIA GPU。这种情况最多是因为装了GPU包而并非真的检测到了显卡需要注意区分。4.3 一个小测试跑一个最简单的模型验证环境可用性最直接的就是拿一个小型网络跑一次前向推理import torch import torch.nn as nn model nn.Sequential( nn.Linear(128, 64), nn.ReLU(), nn.Linear(64, 10) ) x torch.randn(1, 128) y model(x) print(y.shape)输出torch.Size([1, 10])就说明基本链路通了。要是连这个都跑不通再回头检查环境、版本、动态库别先急着装一堆别的库。5. 后续使用时几乎必然遇到的三个大坑安装成功并不表示后面能一帆风顺至少我在Ubuntu 20.04上面继续使用的时候又碰上了下面几个非常普遍的问题提前知道它们能少踩不少雷。5.1 明明装好了但Jupyter里import失败使用conda环境的人经常碰到一个情况你在终端里执行python能正常import torch但打开Jupyter Notebook新建kernel却提示ModuleNotFoundError: No module named torch。这个坑十有八九是Jupyter拉起了系统的Python环境而不是你在conda里创建的那个。解决办法也不是很难conda install ipykernel python -m ipykernel install --user --name torch_cpu --display-name Python (torch_cpu)这样把当前环境作为Jupyter的内核注册进去。在Jupyter里通过内核菜单切换到你注册的“Python (torch_cpu)”即可。我之前第一次遇到这个问题时一度以为自己要把Jupyter卸了重装后来才发现只是内核注册的问题。5.2 系统默认Python把conda环境“顶掉”有时候在终端里明明已经激活了torch_cpu环境但执行某些脚本时脚本还是调用了/usr/bin/python3去运行。究其原因可能是脚本里的shebang明确写死了#!/usr/bin/python3或者你在conda环境里运行某些自定义命令时PATH没有被正确传递。处理方式python ~/your_script.py确保用当前环境的python来启动脚本不要依赖脚本的自动解释器。如果在IDE中运行一定要把解释器路径手动指定到conda环境里的那个python路径通常在~/miniconda3/envs/torch_cpu/bin/python。IDE自动选择的解释器很可能还是系统默认的手动指定才能彻底规避。5.3 pip和conda的库混装引起的不稳定我后来为了安装某个OCR模型库不小心用pip给torch_cpu环境装了一堆依赖其中就有一个提示要升级numpy。当时也没在意结果升级完后另一个库开始报错提示numpy版本不适配。这种依赖冲突的链式反应在conda环境下特别容易蔓延。我的建议是把conda当作基础环境工具而pip尽量只用来安装conda上没有的库。当某次升级造成冲突时第一反应应该是看看是不是conda列表里的某个包被pip悄悄替换了。如果已经冲突乱了直接重建环境往往比梳理依赖更省事conda deactivate conda env remove -n torch_cpu conda create -n torch_cpu python3.9 conda activate torch_cpu pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu6. 关于版本选择与Ubuntu版本适配的个人经验最后说说版本选择的思路。PyTorch的CPU版本安装其实和操作系统版本的适配关系不算紧密但和Python版本的适配关系非常关键。选错了版本在安装阶段可能不会立即报错但运行时会出现奇奇怪怪的符号缺失问题。Python 3.6及以下不再建议老的PyTorch版本安全性也无保障。Python 3.8-3.10是目前PyTorch最成熟的区间推荐新手直接选3.9。Python 3.11及以上可以装但部分第三方库可能还没跟上比如某些视觉库、音频库的预编译wheel缺失需要自己编译容易劝退新手。Ubuntu 20.04本身和Python 3.9的匹配度非常舒服系统库的兼容性也已经被大量验证过了。如果纯粹为了跑PyTorch CPU版我强烈建议固定在这个组合上能省掉很多排查时间。另外安装完以后最好顺手做一次环境备份把依赖全部记下来这样后面换机器或者重建环境都有现成清单可用pip freeze requirements.txt这个文件是对付“环境突然炸了”的后悔药。虽然没有GPUCPU推理慢一点但足够让学习模型、写论文实验、调试生产链路的过程变得顺畅。环境这东西干净、可控、可复现比什么都重要。

相关新闻

农业气象数据分析全流程:从站点数据到田间决策

农业气象数据分析全流程:从站点数据到田间决策

农业气象数据分析这几个字放在一起,乍看像是常规气象业务的延伸,但真正动手做项目之后你就会发现,它的难点全在“农业”这两个字上。同样一份温度数据,城市热岛分析关注的是高温强度和持续时间,而农业场景里要把温度和…

2026/10/14 21:47:51 阅读更多 →
财富积累的系统方法:从认知到实践

财富积累的系统方法:从认知到实践

1. 财富积累的本质认知千万资产并非遥不可及的幻想,而是可以通过系统方法实现的财务目标。我花了三年时间跟踪研究37位白手起家的千万资产持有者,发现他们普遍遵循着相似的财富逻辑:资产净值核心收入杠杆效率时间复利。这个公式中&#xff0c…

2026/10/14 21:47:51 阅读更多 →
时间复杂度与空间复杂度:算法性能分析从入门到实战

时间复杂度与空间复杂度:算法性能分析从入门到实战

很多初学者刚接触数据结构时,第一个拦路虎往往不是树、不是图,而是“时间复杂度”和“空间复杂度”这两个概念。我当年也一样,看着满屏的 O(n)、O(log n)、O(n),心里只有一句话:这到底在算什么东西?后来做过…

2026/10/14 21:47:51 阅读更多 →

最新新闻

Claude账号防封实战指南:从环境搭建到使用节奏的全面解析

Claude账号防封实战指南:从环境搭建到使用节奏的全面解析

1. 从“防封”这个词说起:账号稳定性的真实含义很多人第一次看到“防封”这两个字,脑子里浮现的画面是某种神秘操作或者隐藏开关。但如果你真正在长期使用各类AI工具,尤其是像Claude这种对账号行为比较敏感的服务,就会明白所谓的“…

2026/10/14 22:30:56 阅读更多 →
最简单的出入库系统怎么选?仓库管理软件选型避坑指南

最简单的出入库系统怎么选?仓库管理软件选型避坑指南

仓库管理软件哪个好用?这恐怕是我被问次数最多的问题,没有之一。每次听到这个问题,我都会先反问一句:你说的“好用”,到底是想要什么效果?聊下去之后,绝大多数人其实并不是想要一个功能多么齐全…

2026/10/14 22:30:56 阅读更多 →
Mac 源码编译 OpenClaw 实战:从依赖管理到避坑指南

Mac 源码编译 OpenClaw 实战:从依赖管理到避坑指南

简介:这份源码包面向需要在 Mac 上部署 OpenClaw 的开发者与运维人员,提供从环境准备到配置落地的完整参考。内容围绕 Homebrew、Node.js、Git 等基础依赖的确认,以及通过 brew 安装 OpenClaw CLI、配置本地大模型与网关端口、模型 ID 等关键…

2026/10/14 22:30:56 阅读更多 →
工业AI落地实践:从边缘计算到视觉质检与预测性维护

工业AI落地实践:从边缘计算到视觉质检与预测性维护

工业AI这四个字,这两年被喊得很响,但说实话,真正蹲过产线、在机台边吃过灰、把一个模型从实验室搬到车间里还让它稳定跑上三个月的人,并没有想象中那么多。我入这行快十年,前几年做的是传统机器视觉和PLC集成&#xff…

2026/10/14 22:30:56 阅读更多 →
DSP28335步进电机控制方案:ePWM脉冲输出与梯形加减速详解

DSP28335步进电机控制方案:ePWM脉冲输出与梯形加减速详解

简介:这是一套基于TI TMS320F28335 DSP与Xilinx XC3S500E FPGA协同控制步进电机的完整工程参考,适合电机控制学习者、嵌入式软硬件开发人员,以及开展课程设计或毕业设计的学生使用。整个压缩包共248个文件,大小约25.13MB&#xff…

2026/10/14 22:30:56 阅读更多 →
SQL注入本质:输入未过滤、拼接未隔离、权限未收敛

SQL注入本质:输入未过滤、拼接未隔离、权限未收敛

1. 这不是“黑进网站”的速成课,而是你真正该懂的SQL注入本质很多人看到“SQL注入”四个字,第一反应是黑客电影里飞速滚动的代码、被攻破的数据库、管理员惊恐的脸——这种刻板印象害了不少人。我带过不少刚入门的安全学习者,他们花大量时间背…

2026/10/14 22:29:55 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →