尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

零基础也能上手:Ubuntu 24.04 云服务器 Python 开发环境从零搭建

零基础也能上手:Ubuntu 24.04 云服务器 Python 开发环境从零搭建
📅 发布时间:2026/7/25 15:37:53

零基础也能上手:Ubuntu 24.04 云服务器 Python 开发环境从零搭建

本文是《Python 实战》基础篇的第一篇。所有命令和回显都来自我在一台真实云服务器上的实操,没有任何"想当然"的输出。如果你也打算在云上写 Python,照着敲一遍,基本能避开我踩过的每一个坑。

背景:为什么写这篇

前不久带几个刚入行的同学上云,十个人里有八个在第一步就卡住了——pip install一敲,屏幕蹦出一大段红字,看不懂;再一搜,有人教他们加--break-system-packages,于是环境直接被装花。我自己刚用 Ubuntu 24.04 的时候也犯过类似的错。

这篇文章想做一件事:把"在云服务器上把 Python 环境搭对"这件事,用真实回显摊开给你看。不绕弯子,不藏着报错,踩坑的过程原样保留。

为什么非得在云服务器上折腾 Python?本地装个 Anaconda 不香吗?香,但很多活儿本地干不了:定时跑的数据抓取脚本要 7×24 在线,微信/钉钉机器人要一个常驻进程,训练任务的 GPU 在云上、本地没有,还有各种需要公网 IP 的服务。这些场景都要求你能在裸 Linux 上把 Python 环境独立、干净地搭起来,并且能稳定复现。我自己的习惯是:本地只写代码和做轻量验证,真正跑业务一定上云、一定进虚拟环境。这篇文章就是把这个"上云第一步"彻底讲透。后面所有命令你都能直接复制去敲,建议边读边在终端里跟着跑,比单纯看印象深得多。

环境说明(真实回显)

先交代我手头这台机器的情况。下面是我在服务器上敲的命令和真实返回:

$uname-aLinux ecs-3d3b-00026.8.0-106-generic#106-Ubuntu SMP PREEMPT_DYNAMIC Fri Mar 6 07:58:08 UTC 2026 x86_64 x86_64 x86_64 GNU/Linux$cat/etc/os-release|head-n5PRETTY_NAME="Ubuntu 24.04.4 LTS"NAME="Ubuntu"VERSION_ID="24.04"VERSION="24.04.4 LTS (Noble Numbat)"VERSION_CODENAME=noble $ python3-V&&whichpython3&&whichpip3||truePython3.12.3 /usr/bin/python3 /usr/bin/pip3

可以看到内核是 6.8,系统是 Ubuntu 24.04.4 LTS(代号 Noble Numbat),系统自带的 Python 是3.12.3,且pip3已经在/usr/bin/pip3。这一点很关键:从 Ubuntu 23.04 开始,系统层面的 Python 被标记为"外部管理环境"(externally-managed-environment),这正是后面 PEP 668 报错的源头。

一、用 apt 安装 python3-venv 和 pip

做 Python 开发,虚拟环境venv是标配。我先更新软件源,再安装python3-venv和python3-pip:

$apt-getupdate-yHit:1 http://repo.huaweicloud.com/ubuntu noble InRelease Hit:2 http://repo.huaweicloud.com/ubuntu noble-updates InRelease Hit:3 http://repo.huaweicloud.com/ubuntu noble-backports InRelease Hit:4 http://repo.huaweicloud.com/ubuntu noble-security InRelease Reading package lists... $apt-getinstall-ypython3-venv python3-pip Reading package lists... Building dependency tree... Reading state information... python3-venv is already the newest version(3.12.3-0ubuntu2.1). python3-pip is already the newest version(24.0+dfsg-1ubuntu1.3). The following packages were automatically installed and are no longer required: eatmydata libeatmydata1 python-babel-localedata python3-babel python3-jinja2 python3-json-pointer python3-jsonpatch python3-jsonschema python3-markupsafe python3-pyrsistent python3-tz Use'apt autoremove'to remove them.0upgraded,0newly installed,0to remove and141not upgraded.

说明一下:这台云镜像其实已经预装了python3-venv和python3-pip,所以apt提示 “already the newest version”,并没有真正安装新东西。但这条命令本身没有错,建议你不管镜像有没有预装都跑一遍确认,免得后面python3 -m venv时告诉你venv模块不存在。

装完顺手验证一下可用性和版本:

$ python3-V&&python3-mvenv--help>/dev/null2>&1&&echo'venv OK'&&pip3--versionPython3.12.3 venv OK pip24.0from /usr/lib/python3/dist-packages/pip(python3.12)

venv OK说明虚拟环境模块能正常加载,pip 24.0也确认了包管理器在位。

二、第一次翻车:直接 pip3 install 触发 PEP 668

很多教程会让你"直接pip install装个库试试"。在 Ubuntu 24.04 上,这一步必翻车。我故意复现了一次:

$ pip3installrich error: externally-managed-environment × This environment is externally managed ╰─>ToinstallPython packages system-wide, tryaptinstallpython3-xyz, where xyz is the package you are trying to install. If you wish toinstalla non-Debian-packaged Python package, create a virtual environment using python3-mvenv path/to/venv. Then use path/to/venv/bin/python and path/to/venv/bin/pip. Make sure you have python3-full installed. If you wish toinstalla non-Debian packaged Python application, it may be easiest to use pipxinstallxyz,whichwill manage a virtual environmentforyou. Make sure you have pipx installed. See /usr/share/doc/python3.12/README.venvformoreinformation. note: If you believe this is a mistake, please contact your Python installation or OS distribution provider. You can override this, at the risk of breaking your Python installation or OS, by passing --break-system-packages. hint: See PEP668forthe detailed specification.

这就是 PEP 668 的"外部管理环境"保护机制在起作用。它的本意是:系统自带的 Python 是操作系统很多组件(apt、cloud-init 等)的依赖,如果你用 pip 往系统里乱塞包,很可能和系统包管理器apt管理的版本冲突,把系统搞坏。

多说一句背景,免得你以为这是 Python 的怪脾气。PEP 668 是 2022 年被接受的规范,核心诉求是:当操作系统自带的包管理器(Debian/Ubuntu 的 apt、Red Hat 的 dnf)也在管 Python 时,pip 不应该再往同一个全局site-packages里写东西,否则两套包管理器会互相踩脚。从 Ubuntu 23.04 起,官方镜像就默认带上了EXTERNALLY-MANAGED标记文件,所以你一装系统 Python 就处于被保护状态。换句话说,这个报错不是拦你,是替你兜底——它逼着你养成"项目级隔离"的习惯,而这恰恰是专业开发和随手乱装的分水岭。

重点提醒:报错末尾那句 “you can override this … by passing--break-system-packages” 是个陷阱,不是给你日常用的。我见过有人照着加了这个参数,结果升级系统 Python 时直接崩。正解是——进虚拟环境。

三、用 venv 正确隔离环境

创建一个专属虚拟环境,激活它,再安装包,问题迎刃而解:

$cd/root/lab-a&&python3-mvenv venv&&echo'venv created'&&lsvenv/bin venv created activate activate.csh activate.fish Activate.ps1 pip pip3 pip3.12 python python3 python3.12

venv目录下多了一套独立的python和pip,和系统彻底隔离。激活它(注意source后面跟bin/activate):

$cd/root/lab-a&&sourcevenv/bin/activate&&python-V&&pipinstall-ihttps://repo.huaweicloud.com/repository/pypi/simple--upgradepip-q&&pipinstall-ihttps://repo.huaweicloud.com/repository/pypi/simple ipython rich-q&&echo'INSTALL_DONE'Python3.12.3 INSTALL_DONE

这里我装了ipython(增强版交互解释器)和rich(终端美化库)。一个小经验:在华为云这类国内云上,直接连官方 PyPI 源经常慢到超时,我加了-i https://repo.huaweicloud.com/repository/pypi/simple走华为云镜像,几秒钟就装完了。如果你在其他云,换成对应厂商的 PyPI 镜像即可。激活虚拟环境后,命令行提示符通常会多一个(venv)前缀,表示你正身处隔离环境之中。

顺便说下 venv 的原理,免得把它想得太玄:它本质上是在目标目录里放了一份 Python 解释器的软链接,外加一份独立的site-packages。所以创建 venv 几乎不占空间、秒级完成,激活之后python和pip都指向这份隔离副本,装包只会写进 venv 自己的目录,绝不会碰系统一分一毫。理解了这点,你就再也不会怕建环境了——放心建,一个项目一个,哪天不要了直接删文件夹,干净利落,不像全局装包那样卸载时总担心漏删依赖。

四、跑通第一行代码

环境到位,写第一行代码验一下:

$cd/root/lab-a&&sourcevenv/bin/activate&&python-c"print('hello from venv, python', __import__('sys').version.split()[0])"hello from venv, python3.12.3

能在虚拟环境里打印出3.12.3,说明这套环境已经能正常干活了。

五、动态调试:python3 -m pdb

代码不会一遍写对,调试是日常。pdb是 Python 自带的命令行调试器,不用装任何东西。我准备了一个故意留 bug 的脚本buggy.py,它想算 5 的阶乘却返回 0:

deffactorial(n):r=1foriinrange(n):# 故意留的 bug:range(n) 从 0 开始,会把结果乘成 0r*=ireturnrprint("factorial(5) =",factorial(5))# 期望 120,实际输出 0

用pdb -c把调试命令传进去,复现一个干净的排查过程(-c可以多次使用,依次执行):

$cd/root/lab-a&&python3-mpdb-c"l"-c"b 4"-c"c"-c"p i"-c"p r"-c"n"-c"p r"-c"c"-c"q"buggy.py1->def factorial(n):2r=13foriinrange(n):# 故意留的 bug:range(n) 从 0 开始,会把结果乘成 04r *=i5returnr67print("factorial(5) =", factorial(5))# 期望 120,实际输出 0[EOF]Breakpoint1at /root/lab-a/buggy.py:4010

解读这次会话:l列出源码;b 4在第 4 行r *= i下断点;c让程序跑到断点停下;此时p i打印出0、p r打印出1——注意循环变量i从 0 就开始了;n单步执行这一行,把r乘上i(也就是 0),再p r得到0。根因一目了然:range(n)生成的是0..n-1,第一轮就把累积值乘成了 0。正确写法应是range(1, n+1)。这种"看一眼变量就破案"的体验,就是 pdb 的价值。

小提示:如果你在交互终端里调试,直接python3 -m pdb buggy.py然后敲l、n、p 变量名、q就行;非交互场景(比如写进脚本批量跑)用-c传命令最稳,避免管道喂命令时 pdb 提前读到 EOF 重启程序。

六、查官方文档:help() 与 dir()

遇到不熟悉的模块或对象,别急着搜百度,Python 自带的文档就在手边。

dir()列出对象支持的所有属性和方法,配合字符串过滤很方便:

$cd/root/lab-a&&python3-c"print([m for m in dir('') if 'strip' in m])"['lstrip','rstrip','strip']

help()直接拉出官方文档,比如看看math.sqrt的签名和说明:

$cd/root/lab-a&&python3-c"import math; help(math.sqrt)"Help on built-infunctionsqrtinmodule math: sqrt(x, /)Return the square root of x.

比起翻网页,help()给的是当前环境里这个版本的确切说明,最不容易过时。

七、虚拟环境的日常:查看依赖、导出与退出

环境搭好、包装好之后,还有几个我几乎每天都会用到的操作,趁热打铁记一下。

先看当前环境到底装了些什么:

$cd/root/lab-a&&sourcevenv/bin/activate&&pip list2>/dev/null|head-n12Package Version ----------------------- ------- asttokens3.0.2 decorator5.3.1 executing2.2.1 ipython9.15.0 ipython_pygments_lexers1.1.1 jedi0.20.0 markdown-it-py4.2.0 matplotlib-inline0.2.2 mdurl0.1.1 parso0.8.7

pip list把环境里所有第三方包和版本号列出来,前面装的ipython 9.15.0赫然在列,说明它确实装进了虚拟环境,而不是系统里。

把依赖导出成requirements.txt,是协作和部署里最标准的一步:

$cd/root/lab-a&&sourcevenv/bin/activate&&pip freeze2>/dev/null|head-n6&&deactivate&&echoDEACTIVATEDasttokens==3.0.2decorator==5.3.1executing==2.2.1ipython==9.15.0ipython_pygments_lexers==1.1.1jedi==0.20.0 DEACTIVATED

pip freeze输出的是"包名==精确版本号"的锁定格式,把它重定向到requirements.txt后,换一台机器只要执行pip install -r requirements.txt就能复现出一模一样的环境。这条命令在团队开发、CI 流水线和容器镜像构建里都是标配,原因很简单:Python 项目的"可复现"几乎全靠这个锁文件撑着,否则别人拉了你的代码却装了一堆不同版本的依赖,bug 根本没法对齐。

这里我还顺手演示了deactivate——退出虚拟环境。退出后命令行提示符上那个(venv)前缀会消失,此时再用pip就又指向系统 Python 了。这引出一个我见过很多人犯的低级错误:装包前一定要先看一眼提示符带不带(venv)。我经常一边开着多个终端,有的在环境里、有的在系统里,装完包发现 import 报错,多半就是装错地方了。养成"激活→装包→用完 deactivate"的习惯,能省掉大量这种乌龙。

踩坑清单

现象根因正确做法
pip3 install报externally-managed-environmentUbuntu 24.04 启用 PEP 668,禁止污染系统 Python用python3 -m venv建虚拟环境,在环境内安装
报"venv 模块不存在"镜像没装python3-venv先apt-get install -y python3-venv
想加--break-system-packages强行装被报错末尾提示误导坚决不用,除非你清楚在干什么且只影响一次性容器
pip 安装卡住/超时默认连官方 PyPI 源慢加-i走云厂商 PyPI 镜像
pdb 管道喂命令出现[EOF]重启程序非交互下 stdin 提前耗尽用python3 -m pdb -c "命令"多次传参

总结

在 Ubuntu 24.04 云服务器上搭 Python 环境,核心就一句话:永远在虚拟环境里装包,别碰系统 Python。PEP 668 的报错不是障碍,是保护;venv+pip的组合足以覆盖 99% 的日常开发;pdb和help()/dir()则是零成本的自带工具,关键时刻能省下大量搜网页的时间。

回过头看,这一篇没讲什么高深东西,全是最朴素的几条命令。但恰恰是这些朴素命令,决定了你后续所有 Python 项目的地基稳不稳。我在好几个线上事故里见过根因:有人为了图快加--break-system-packages全局装包,结果系统 Python 被带崩,连apt都跑不了;有人把依赖写死在系统里,换机器部署时差了三个版本,定位花了半天。所以别嫌啰嗦——把venv刻进肌肉记忆,比学十个框架都值钱。

下一篇我会基于这套环境,实打实过一遍 Python 3.12 的核心语法:从数据类型、f-string、浮点精度坑,到列表/字典/|=合并运算符、match 模式匹配,再到计算器和通讯录两个小实战。


本文实验均在华为云 Flexus X 实例(Ubuntu 24.04, Python 3.12.3)上真实执行。

相关新闻

  • 30分钟利用AI Codex高效撰写发明专利草案:从技术构思到结构化文档
  • 深度解析G-Helper:华硕笔记本硬件控制系统的轻量化架构设计
  • Honey Select 2汉化补丁终极指南:15分钟实现完美中文游戏体验

最新新闻

  • 2026年7月滨海儿童摄影哪家好?万千宝妈实名推荐童颜摄影 - 起跑123
  • MSP430 FRAM超低功耗设计:从原理到实践的嵌入式系统优化指南
  • 深信服超融合方案快速选型指南:从需求到落地的简明路径 - 汇聚至此
  • 2026保定满城区幼儿园怎么选?看安全透明、师资稳定、特色硬件的高品质园所 - 中国品牌价值观察网
  • 2026精选推荐宜春重磅预警!手表回收6大内幕套路,正规无套路回收机构出炉 - 谊识预商贸
  • 2026年度盘点松原手表包包回收奢侈品回收行业深度指南:从行业乱象到高价变现全攻略 - 谊识预商贸

日新闻

  • 从国家条件到买方清单,深入理解 ABAP CDS 单值过滤器派生
  • 2026 年当下,齐齐哈尔专业的不锈钢闸门批发厂家哪个好,揭秘!这个工业“铁门”如何实现成本翻倍的效率提升? - 行业甄选官
  • 2026阳极氧化加工厂推荐:从设备规模看硬质氧化技术的成熟应用推荐百正机械 - 栗子测评

周新闻

  • SaaS软件行业GEO实践:AI搜索时代的品牌可见性与获客新路径
  • 什么是PCTFE?医药高端包装的“防潮王牌“材料
  • 【JVM调优实战】16-可视化利器-JConsole-VisualVM-JMC

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号