Linux下怎么用apt或yum命令升级Python版本

Finn
Finn
发布时间:2026-11-02| 5人浏览过
原创

详细讲解在Ubuntu、Debian、CentOS与RHEL等Linux系统下,如何使用apt或yum/dnf安全安装和升级新版Python,保护系统依赖并实现多版本平滑共存。

在 Linux 环境中升级 Python 时,最关键的原则是:切勿直接删除或强制覆盖系统自带的 /usr/bin/python3 软链接。无论是 Debian/Ubuntu 还是 CentOS/RHEL,系统的包管理器(如 yum、dnf)以及大量底层系统管理脚本都强依赖特定的 Python 原生版本。安全且推荐的做法是通过 apt 或 yum/dnf 安装独立的目标高版本 Python,实现新旧版本共存,再结合虚拟环境或版本管理机制进行按需调用。

一、升级前的核心认知:为什么不能强行替换系统 Python

许多初学者在需要较新的 Python 特性时,会尝试下载源码编译覆盖原有的 python3,或者强行将 /usr/bin/python3 指向新版本。这种操作往往会带来严重的系统级故障:

  • CentOS / RHEL 系统的包管理器瘫痪:yum 和 dnf 本身就是用 Python 编写的脚本工具,其内部库绑定了特定的小版本(如 Python 2.7 或 Python 3.6)。一旦全局解释器被替换,执行 yum update 或安装任何软件都会抛出 SyntaxError 或模块丢失错误。
  • Ubuntu / Debian 的系统守护脚本报错:系统升级工具、网络配置管理器(如 netplan)等核心工具同样依赖系统预装的 Python 库环境,破坏默认符号链接会导致系统组件无法正常拉起。

因此,合理的“升级”本质上是“安装新版本并在应用层使用”,保持操作系统底层与用户应用层的环境解耦。

Linux下怎么用apt或yum命令升级Python版本
图 1:Linux 下系统 Python 与新版本应用 Python 的隔离共存架构

二、在 Debian / Ubuntu 下使用 apt 升级或安装新版 Python

Debian 和 Ubuntu 官方源为了保证稳定性,通常只为特定系统发行版锁定一个 Python 主版本。如果需要更高版本(例如在 Ubuntu 20.04/22.04 上安装 Python 3.11 或 3.12),推荐使用经过社区长期维护的 deadsnakes PPA 源。

步骤 1:检查当前系统版本

python3 --version

记录当前输出的版本号(例如 Python 3.8.10),便于后续对照验证。

步骤 2:添加 deadsnakes PPA 软件源

安装添加软件源所需的常用工具包,并将 PPA 仓库添加到系统中:

sudo apt update
sudo apt install -y software-properties-common
sudo add-apt-repository -y ppa:deadsnakes/ppa
sudo apt update
说明:在 Debian 系统上,通常推荐使用 Backports 仓库,或者从官方源码规范打包;若在 Ubuntu 系列上,deadsnakes 提供了最为完整且可靠的预编译多版本支持。

步骤 3:使用 apt 安装目标 Python 版本

以安装 Python 3.11 为例,除了主程序外,强烈建议同时安装对应的 venv(虚拟环境模块)和 dev(开发头文件,编译 C 扩展依赖):

sudo apt install -y python3.11 python3.11-venv python3.11-dev

步骤 4:验证新版本安装

安装完成后,直接调用新版本的特定可执行文件:

python3.11 --version

示例输出:

Python 3.11.9

此时,原有的 python3 依然代表系统版本,而 python3.11 已成功独立就绪。

Linux下怎么用apt或yum命令升级Python版本
图 2:Ubuntu/Debian 使用 apt 安装升级 Python 的步骤流水线

三、在 CentOS / RHEL 下使用 yum 或 dnf 升级安装新版 Python

在 Red Hat 系发行版中,具体安装机制取决于系统的发行版代际:

操作系统版本 包管理器 推荐升级/获取途径 主要特点
CentOS 7 / RHEL 7 yum SCL (Software Collections) 独立安装到 /opt/rh/,完全隔离原生 Python 2.7
CentOS 8 / Stream / RHEL 8 dnf AppStream 模块流 / EPEL 系统内置多版本模块,支持以 dnf module 切换
Rocky / AlmaLinux / RHEL 9 dnf 原生 AppStream 仓库 自带 Python 3.9,并可直接安装 Python 3.11 / 3.12

场景 A:CentOS 7 下使用 SCL 安装新版本

CentOS 7 默认 Python 为 2.7,严禁替换。官方通过 SCL(Software Collections)仓库提供现代化 Python 环境:

# 1. 安装 SCL 仓库发布包
sudo yum install -y centos-release-scl

# 2. 安装指定版本的 Python(例如 Python 3.8)
sudo yum install -y rh-python38 rh-python38-python-devel rh-python38-python-pip

# 3. 激活新环境到当前 shell
scl enable rh-python38 bash

在激活后的终端会话中,python -V 会直接显示为 Python 3.8.x,而退出终端或新开连接时,系统依然保持默认状态,两全其美。

场景 B:CentOS 8/9、RHEL 8/9 使用 dnf 安装新版本

在现代 RHEL 衍生版中,dnf 已经提供了原生的多版本支持:

# 检查可用的 Python 模块流
sudo dnf module list python3*

# 直接安装目标新版本,例如 Python 3.11
sudo dnf install -y python3.11 python3.11-pip python3.11-devel

# 验证安装
python3.11 --version
Linux下怎么用apt或yum命令升级Python版本
图 3:CentOS 与 RHEL 针对不同版本的升级与获取决策

四、新版本 Python 的正确使用姿势与版本切换

通过上述步骤安装好新版 Python 后,系统里同时存在着系统原生版本与新安装的高版本。该如何在日常工作中优雅使用?以下是三种实践策略:

策略一(官方最佳实践):使用虚拟环境(venv)

无论部署生产服务还是本地调试,虚拟环境是业界推荐的标准方案。它能将项目的第三方库与 Python 解释器完整封装在独立目录中,不污染系统,也不受全局环境变量波动影响:

# 为项目创建基于 Python 3.11 的独立虚拟环境
python3.11 -m venv my_project_env

# 激活虚拟环境
source my_project_env/bin/activate

# 此时环境内的 python 与 pip 自动锁定为新版 3.11
python -V
pip install fastapi uvicorn

# 退出虚拟环境
deactivate

策略二:显式使用版本后缀命令

在编写自动化脚本、CI/CD 流程或系统 crontab 定时任务时,直接在命令中指定确切的解释器二进制全名或路径:

python3.11 /opt/scripts/data_sync.py

这种做法没有任何配置开销,绝对不会与系统发生命名冲突,透明直观。

策略三:通过 update-alternatives 管理系统级备选版本(谨慎使用)

如果确实希望在终端里敲 python3 时默认调用新版本,推荐使用发行版提供的 update-alternatives 工具,而不是粗暴地 rm 和 ln -s。它允许随时一键切回原生状态:

# 1. 将系统原生 Python 和新安装版本都登记到 alternatives
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.8 1
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.11 2

# 2. 交互式选择当前默认的 python3
sudo update-alternatives --config python3
重要注意事项:若切换后发现系统的包管理命令(如 apt 某些更新插件)出现报错,请立刻重新运行 sudo update-alternatives --config python3 并切回编号较小的系统原生版本。
Linux下怎么用apt或yum命令升级Python版本
图 4:Python 版本调用策略与最佳实践对比

五、常见问题与应急排查

1. 安装后新版本没有 pip 怎么办?

在 Debian/Ubuntu 或 CentOS 某些子版本中,pip 可能会被独立拆包。如果执行 python3.11 -m pip -V 提示模块不存在,可通过自带的 ensurepip 模块进行快速引导初始化:

python3.11 -m ensurepip --upgrade
python3.11 -m pip --version

或者直接通过对应的包管理器补齐对应组件:

# Ubuntu / Debian
sudo apt install -y python3.11-venv

# CentOS / RHEL
sudo dnf install -y python3.11-pip

2. 误改软链接导致 apt 或 yum 报错打不开怎么办?

如果不小心覆盖了全局软链接,导致执行包管理器时出现 ModuleNotFoundError: No module named 'apt_pkg' 或类似异常,只需使用绝对路径将符号链接修复回系统的原生版本即可:

# 查看系统最初的 Python 原生文件(例如 Ubuntu 20.04 是 3.8,22.04 是 3.10)
ls -l /usr/bin/python3*

# 重新建立指向系统原版解释器的软链接(以修复为 3.8 为例)
sudo ln -sf /usr/bin/python3.8 /usr/bin/python3

修复后,apt 或 yum 即可立即恢复正常运转。

结语

在 Linux 生产与日常运维中,“升级 Python”从不意味着消灭旧版本。通过 apt 添加优质第三方源(如 deadsnakes)或利用 yum/dnf 模块流安装目标新版,使其与系统预装环境安稳共存,并结合 venv 开展项目开发,既能享受到现代 Python 语言的最新特性与性能优势,又能保障操作系统基础生态的长期稳定。

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

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 算法库。