Appearance
CentOS / RHEL 系列安装 Python
本教程围绕 CentOS、Rocky Linux、AlmaLinux、RHEL 等 RPM 系 系统如何安装、并行使用较新的 Python 3,并说明为什么不能随便卸载系统自带的 Python,以及误操作后如何尽量修复。更通用的说明见 环境搭建 与 Python 升级指南。
先读:版本与发行版现状
| 说明 | 建议 |
|---|---|
| CentOS Linux 7 | 已于 2024 年结束维护,官方镜像下线;若仍在使用,RPM 需从 vault.centos.org 等归档地址获取,且应尽快迁移到 Rocky Linux / AlmaLinux 等。 |
| Rocky / Alma / RHEL 8+ | 使用 dnf、python3,可通过 AppStream 模块 或 源码安装到独立目录 获得较新的 3.x。 |
| 系统自带的 Python | 为 yum / 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 模块,依次尝试:
- 补装发行版包:
sudo yum install -y python3-pip或sudo dnf install -y python3-pip(与上表一致,部分镜像曾只装python3未带python3-pip)。 ensurepip:python3 -m ensurepip --upgrade(若发行版未禁用该模块)。- 官方引导脚本
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-develCentOS 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-devel2. 下载、编译、安装(使用 altinstall)
make altinstall 会安装 python3.12、pip3.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-2、python-libs、rpm-python、yum- 等,记下当前目录里真实存在的文件名与版本号(与博文中的 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-libs、dnf、rpm 等包,再 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。