Linux(Ubuntu/CentOS)怎么通过包管理器更新Python

Chloe
Chloe
发布时间:2026-11-11| 3人浏览过
原创

详细介绍在 Ubuntu 与 CentOS/RHEL 等常见 Linux 发行版中,如何安全使用系统包管理器(APT、DNF、YUM)更新和安装新版 Python,避免破坏系统依赖,实现多版本平稳共存与虚拟环境隔离。

在 Linux 系统中更新 Python,核心目标是在绝不影响操作系统底层原生依赖的前提下,通过受信任的系统包管理器引入高版本运行时并安全调用。无论是在基于 Debian/Ubuntu 的 APT 体系还是基于 RHEL/CentOS 的 DNF/YUM 体系中,正确姿势均是采用“版本共存”机制,而非暴力覆写系统默认可执行文件。
Linux(Ubuntu/CentOS)怎么通过包管理器更新Python
图 1:Linux 包管理器更新 Python 的并存隔离机制概览

一、核心原则:为什么严禁直接覆写系统默认 Python

很多 Linux 初学者在需要新版 Python(如 3.11 或 3.12)时,第一反应往往是下载新二进制或编译后,将 /usr/bin/python3 这一符号链接强制指向新版本。这种做法极易直接导致操作系统崩溃或包管理器瘫痪。

在现代主流发行版中:

  • Ubuntu / Debian 体系:底层包管理工具 apt、软件属性管理 software-properties-common 以及各类系统监控守护进程,均硬编码绑定了系统发行版发布时预置的默认 Python 解释器。
  • CentOS / RHEL 体系:核心包管理工具 yum(CentOS 7)或 dnf(CentOS 8/9、Stream、Rocky、AlmaLinux),以及防火墙配置工具 firewalld,均纯粹依靠系统 Python 解释器执行。

一旦更改 /usr/bin/python3 的指向,新版本中若缺少系统底层脚本依赖的 C 扩展模块、distutils 模块或接口产生弃用不兼容,你将立即遭遇 ImportError 或 ModuleNotFoundError,导致 apt 或 dnf 自身无法再运行。

因此,通过包管理器更新 Python 的标准做法是:通过包管理器的独立包机制,安装带有主次版本后缀的独立二进制(如 python3.12),与系统原有的 python3 并存。

Linux(Ubuntu/CentOS)怎么通过包管理器更新Python
图 2:Linux 系统底座与独立应用运行时隔离原理图

二、Ubuntu 系统通过 APT 包管理器安装新版 Python

Ubuntu 官方主仓库在发布 LTS 版本时,会冻结一个固定的 Python 版本(例如 Ubuntu 20.04 预置 Python 3.8,Ubuntu 22.04 预置 Python 3.10,Ubuntu 24.04 预置 Python 3.12)。如果需要在现有的 Ubuntu 上使用更新的 Python 版本,最可靠、最符合包管理规范的方法是引入由核心维护团队维护的 deadsnakes PPA 源。

1. 查看当前版本状态

首先打开终端,确认当前发行版代号与系统默认 Python 版本:

bash - check environment
python3 --version
lsb_release -a

示例输出:

Python 3.10.12
Distributor ID: Ubuntu
Description:    Ubuntu 22.04.4 LTS
Release:        22.04
Codename:       jammy

2. 安装前置依赖并添加 deadsnakes PPA

添加 PPA 需要用到 add-apt-repository 命令,该命令由 software-properties-common 软件包提供:

bash - add repository
sudo apt update
sudo apt install -y software-properties-common
sudo add-apt-repository -y ppa:deadsnakes/ppa
sudo apt update

执行 sudo apt update 后,APT 会抓取 deadsnakes 仓库中为当前 Ubuntu 发行版编译打包的所有 Python 版本元数据。

3. 通过 APT 安装指定版本的 Python 及其关键组件

以安装当前广泛应用的 Python 3.12 为例,不要只安装核心二进制,务必同时安装其 虚拟环境支持模块(venv) 和 头文件开发包(dev):

bash - install python
sudo apt install -y python3.12 python3.12-venv python3.12-dev
重要解释:Ubuntu 的 Debian 打包规则将标准库中的 venv 和 C 编译所需的头文件拆分成了独立子包。若未安装 python3.12-venv,在执行 python3.12 -m venv 时会报错 No module named ensurepip。

4. 验证安装与构建隔离环境

安装完成后,直接通过带小版本号的命令检验:

bash - verify & run
python3.12 --version
# 输出示例: Python 3.12.3

# 为实际项目创建专属虚拟环境
python3.12 -m venv ~/projects/my_app_env
source ~/projects/my_app_env/bin/activate

# 激活后查看,此时已安全切换到新版本
(my_app_env) $ python --version
Python 3.12.3
Linux(Ubuntu/CentOS)怎么通过包管理器更新Python
图 3:Ubuntu 环境通过 APT 与 deadsnakes 规范升级执行步骤

三、CentOS / RHEL 系列通过 DNF / YUM 更新 Python

在基于 Red Hat 企业 Linux(RHEL)体系的发行版(包括 CentOS 7、CentOS 8/9 Stream、Rocky Linux、AlmaLinux)中,包管理机制随着版本演进而有所不同:

  • CentOS 8 / 9 / Stream / Rocky / AlmaLinux:引入了 DNF(Dandified YUM)及 AppStream 模块化流(Module Streams),允许同一个包名下存在多个互相平行的版本流。
  • CentOS 7(传统体系):底层包管理器为 YUM,其官方核心库锁死在 Python 2.7 与 Python 3.6。必须借助 SCL(Software Collections) 实现高版本并存。

方案 A:CentOS 8 / 9 / Stream (采用 DNF AppStream 模块化)

DNF 原生支持版本模块流,你可以直接通过包管理器查询、启用并安装指定版本的 Python。

bash - dnf stream
# 1. 检索当前系统 AppStream 中所有可用的 Python 模块
sudo dnf module list python*

# 2. 安装目标版本(以 Python 3.11 为例)
sudo dnf install -y python3.11 python3.11-devel

# 3. 验证新版本
python3.11 --version

在 CentOS 8/9 中安装后,系统依然保留 /usr/bin/python3 供 dnf 自用,而新安装的版本以 python3.11 独立可执行文件存在,完全符合系统安全标准。

方案 B:CentOS 7 (采用 YUM + SCL 软件集)

CentOS 7 系统的 yum 强依赖 Python 2.7。为了在此系统上获得 Python 3.8 等版本,需启用 SCL 软件源:

bash - centos 7 scl
# 1. 安装 SCL 源和 EPEL 扩展源
sudo yum install -y centos-release-scl epel-release

# 2. 从 SCL 仓库中安装目标版本(以 rh-python38 为例)
sudo yum install -y rh-python38 rh-python38-python-devel

# 3. 在当前终端会话中激活该环境
scl enable rh-python38 bash
python --version
# 输出示例: Python 3.8.13

SCL 的设计极其精妙:它将高版本 Python 安装于 /opt/rh/rh-python38/root/usr/bin/python,只有在执行 scl enable 时才会将该路径临时加入当前子 Shell 的 PATH,完全不修改全局系统文件,保障了 yum 的长期稳定。

Linux(Ubuntu/CentOS)怎么通过包管理器更新Python
图 4:CentOS / RHEL 不同大版本下的包管理器升级路径划分

四、多版本共存管理与虚拟环境调用策略

当系统中通过包管理器成功安装了多个 Python 版本后,日常如何调用?这里存在一个广泛被讨论的工具:update-alternatives。

1. 为什么建议审慎使用 update-alternatives 管理 python3

update-alternatives 可以在系统中配置符号链接优先级。但是,强烈不推荐直接使用它来切换 /usr/bin/python3 的指向:

高风险提示:如果将 python3 这个名字交给 update-alternatives 管理并切到了 3.12,任何使用了 #!/usr/bin/python3 解释器路径的系统运维脚本,都会立刻在 3.12 下运行。如果脚本依赖了原本 3.10 的私有库,就会立即崩溃。

如果确实希望在终端里敲 python(注意是没有 3 的名字)直接指向新版,可以仅将 python 绑定到新版本,而让 python3 始终指向系统默认版本:

bash - safe alternatives
# 仅将 'python' 注册到 alternatives,保留 'python3' 不动
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.12 1

2. 行业标准最佳实践:以项目虚拟环境为中心

真正健康、可维护的 Python 开发与部署方式,是将全局环境保持纯净,所有业务完全托管在虚拟环境内:

  1. 构建环境:直接指明解释器,如 python3.12 -m venv .venv。
  2. 激活环境:source .venv/bin/activate。
  3. 安装三方库:直接使用 pip install -r requirements.txt。此时 pip 自动指向 .venv/bin/pip,所有依赖纯粹安装在当前项目的 .venv/lib/ 下,即使删掉整个目录也绝不污染系统环境。

五、常见异常排查与紧急修复

在通过包管理器安装和配置 Python 过程中,有两个高频出现的错误需要重点掌握。

1. 报错:No module named 'ensurepip' 或 No module named 'distutils'

原因:Ubuntu 等系统为了保持最小安装体积,将标准库里的 ensurepip、venv 以及 distutils 从主解释器包中剥离了出来。
解决方法:补装对应小版本的套件即可:

sudo apt install -y python3.12-venv python3.12-distutils

2. 误改软链接导致 apt 或 dnf 无法运行的应急修复

如果不慎误执行了 ln -sf /usr/bin/python3.12 /usr/bin/python3,导致执行 apt 时抛出 ModuleNotFoundError: No module named 'apt_pkg',不要慌张,可以通过以下步骤紧急复原:

bash - emergency recovery
# 1. 查找当前系统原装的默认 Python 版本文件
ls -l /usr/bin/python3*

# 2. 假设原本 Ubuntu 22.04 自带的是 python3.10,强制将软链接指回原版
sudo ln -sf /usr/bin/python3.10 /usr/bin/python3

# 3. 再次测试 apt,功能立即恢复正常
sudo apt update
Linux(Ubuntu/CentOS)怎么通过包管理器更新Python
图 5:主流 Linux 发行版包管理器更新 Python 速查对照与避坑守则

六、总结与建议

通过包管理器更新 Linux 系统中的 Python,本质是一场在保障底层操作系统稳固前提下的多运行时管理:

  • 在 Ubuntu 环境下,利用 ppa:deadsnakes/ppa 是最稳健的行业通用方式,配合 python3.X-venv 能在数分钟内提供干净的高版本支持。
  • 在 CentOS / RHEL 环境下,现代版本直接依托 dnf module 模块流,老版本(CentOS 7)依托 SCL,均能达成对原生系统零侵入的目标。
  • 无论何时,永远不要通过覆写 /usr/bin/python3 来“升级”全局环境。让系统 Python 守好系统服务,让业务项目在独立的 venv 中运行,是保障 Linux 服务器长期稳定运行的黄金法则。
相关专题:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。