Skip to content

CentOS / RHEL 系列安装 Python

本教程围绕 CentOS、Rocky Linux、AlmaLinux、RHELRPM 系 系统如何安装、并行使用较新的 Python 3,并说明为什么不能随便卸载系统自带的 Python,以及误操作后如何尽量修复。更通用的说明见 环境搭建Python 升级指南

先读:版本与发行版现状

说明建议
CentOS Linux 7已于 2024 年结束维护,官方镜像下线;若仍在使用,RPM 需从 vault.centos.org 等归档地址获取,且应尽快迁移到 Rocky Linux / AlmaLinux 等。
Rocky / Alma / RHEL 8+使用 dnfpython3,可通过 AppStream 模块源码安装到独立目录 获得较新的 3.x。
系统自带的 Pythonyum / dnf、firewalld、cloud-init 等工具提供运行时;不要用「卸载全部 Python RPM」的方式追求高版本。

推荐思路:保留系统自带的 python / python3,业务与开发使用 python3.x/usr/local 下的解释器 + 虚拟环境,避免版本冲突且不伤包管理器。


推荐做法一:用发行版仓库安装 Python 3

CentOS 7 / 同类老系统(仍有 yum

bash
sudo yum install -y python3 python3-pip
python3 --version

此时系统里往往仍有 Python 2.7(供旧版 yum 使用),请勿/usr/bin/python 强行链到 python3,否则可能导致 yum 异常。

Rocky Linux / AlmaLinux / RHEL 8 / 9(dnf

bash
sudo dnf install -y python3 python3-pip
python3 --version

已有 python3,但没有 pip

先检查:

bash
python3 -m pip --version

若提示无 pip 模块,依次尝试:

  1. 补装发行版包sudo yum install -y python3-pipsudo dnf install -y python3-pip(与上表一致,部分镜像曾只装 python3 未带 python3-pip)。
  2. ensurepippython3 -m ensurepip --upgrade(若发行版未禁用该模块)。
  3. 官方引导脚本 get-pip.py:用当前解释器执行,避免装错版本;完整命令与注意点见 环境搭建 → pip 安装与配置 中的 「安装 pip(本机还没有 pip 时)」

需要 仓库中已提供的其它 3.x 主版本 时,可查模块(以 RHEL 8 系为例,具体以 dnf module list 输出为准):

bash
dnf module list python*
# 按官方文档启用对应 stream 后再安装,例如部分环境提供 python39 等

推荐做法二:源码编译,安装到独立前缀(与系统并存)

适合仓库里的 Python 偏旧、又需要固定较新版本时使用。以下以安装到 /usr/local/python-3.12 为例,版本号请自行到 python.org 源码目录 核对最新稳定版并替换 URL 与目录名

1. 安装编译依赖

RHEL 8 / Rocky / Alma 8+

bash
sudo dnf groupinstall -y "Development Tools"
sudo dnf install -y openssl-devel bzip2-devel libffi-devel zlib-devel \
  readline-devel sqlite-devel xz-devel tk-devel gdbm-devel

CentOS 7(仍使用 yum 时):

bash
sudo yum groupinstall -y "Development Tools"
sudo yum install -y openssl-devel bzip2-devel libffi-devel zlib-devel \
  readline-devel sqlite-devel xz-devel tk-devel gdbm-devel

2. 下载、编译、安装(使用 altinstall

make altinstall 会安装 python3.12pip3.12 等,避免覆盖系统已有的 python3 可执行文件。

bash
cd /tmp
wget https://www.python.org/ftp/python/3.12.8/Python-3.12.8.tgz
tar -xzf Python-3.12.8.tgz
cd Python-3.12.8
./configure --enable-optimizations --prefix=/usr/local/python-3.12
make -j "$(nproc)"
sudo make altinstall

验证:

bash
/usr/local/python-3.12/bin/python3.12 --version
/usr/local/python-3.12/bin/python3.12 -m pip --version
/usr/local/python-3.12/bin/python3.12 -m venv ~/test-venv

一般 make altinstall 会带上对应版本的 pip3.x。若 python3.12 -m pip 不可用,可用同一解释器执行官方 get-pip.py(见 环境搭建)。

需要全局命令名时,可为 具体版本 建软链接(勿覆盖 /usr/bin/python 若仍被 yum 依赖):

bash
sudo ln -sf /usr/local/python-3.12/bin/python3.12 /usr/local/bin/python3.12

项目内优先用 虚拟环境 指向该解释器,而不是改系统默认 python


不推荐:批量强制卸载「所有 Python 相关 RPM」

网上常见类似命令:

bash
rpm -qa | grep python | xargs rpm -ev --allmatches --nodeps

以及配合删除文件:

bash
whereis python | xargs rm -frv

风险极高

  • --nodeps 会破坏依赖关系,yum / dnf、rpm 自身 可能立即不可用。
  • whereis 输出多个路径,rm -frv 容易误删非 RPM 管理目录。

结论:不要把上述操作当作「升级 Python」的常规步骤;仅在你已明确后果、且在做救急修复或隔离实验机时,才在理解每一步的前提下使用下文「救急」思路。


救急:误删系统 Python 后,尽量恢复 yum 与 Python(CentOS 7 示例)

以下整理自常见排错文章,仅适用于已与系统版本一致的 RPM 包、且你能从归档站或安装介质拿到同名包的情况。包名中的 版本号必须与本机原先发行版小版本一致或兼容,不能照搬旧博文里的 7.7.1908 文件名。

1. 确认系统版本

bash
cat /etc/redhat-release

例如显示 CentOS Linux release 7.9.2009 (Core),则应到 对应小版本 的归档路径下载 RPM(CentOS 7 已 EOL,示例基址):

text
https://vault.centos.org/7.9.2009/os/x86_64/Packages/

在浏览器或另一台正常机器上打开该目录,搜索 python-2python-libsrpm-pythonyum- 等,记下当前目录里真实存在的文件名与版本号(与博文中的 2.7.5-88.el7 很可能不同)。

2. 用 rpm 安装已下载的包(无 yum 时)

将 RPM 拷到本机同一目录后,按依赖关系大致顺序安装(顺序若报错,可根据提示调整):

bash
sudo rpm -Uvh --replacepkgs python-libs-*.rpm
sudo rpm -Uvh --replacepkgs python-*.rpm
sudo rpm -Uvh --replacepkgs python-iniparse-*.rpm
sudo rpm -Uvh --replacepkgs python-pycurl-*.rpm
sudo rpm -Uvh --replacepkgs rpm-python-*.rpm
sudo rpm -Uvh --replacepkgs yum-metadata-parser-*.rpm
sudo rpm -Uvh --replacepkgs yum-plugin-fastestmirror-*.rpm
sudo rpm -Uvh --replacepkgs yum-*.rpm

若曾删除 /etc/yum.repos.d/ 下仓库配置,还需从同版本系统或文档恢复 .repo 文件,否则 yum 仍无法装包。

3. 验证

bash
python --version    # CentOS 7 上可能仍为 2.x,属正常
python3 --version
yum --version

恢复后,高版本 Python 3.x 仍建议用上一节的源码或模块方式并行安装,不要再次批量卸载系统包。


Rocky / Alma / RHEL 8+ 若 dnf 损坏

优先使用 安装介质 / rescue 模式 或从相同大版本镜像 dnf download 在另一台机下载缺失的 python3-libsdnfrpm 等包,再 rpm -Uvh 修复。具体包名随小版本变化,以官方故障排除文档为准。


小结

目标做法
能跑 Python 3 做开发/业务yum install python3 / dnf install python3,或 源码 altinstall/usr/local
避免和系统冲突不要卸载全部系统 Python;业务用 venv 或固定路径的解释器。
系统已被破坏与发行版小版本一致 的 RPM 从 vault / ISO 恢复,再考虑并行安装新 Python。

长期运行在 CentOS 7 上的服务,建议规划迁移到 Rocky Linux / AlmaLinux 等仍在维护的发行版,再按本文 dnf + 模块或源码 方式管理 Python。

相关阅读