CentOS/RHEL Linux安装Python 3的详细步骤
详细介绍在 CentOS 与 RHEL Linux 系统中安装 Python 3 的完整操作步骤。涵盖包管理器快速安装(DNF/YUM)与高版本源码编译安装(make altinstall)两种方案,深入讲解系统底层依赖保护、OpenSSL与libffi避坑、多版本共存及虚拟环境配置。
yum,CentOS Stream 与 RHEL 8/9 使用 dnf)直接安装官方打包版本,适合追求快速、稳定且不需要最新语言特性的生产主机;二是从 Python 官方下载源码包进行自主编译,并通过 make altinstall 命令安装到独立目录,适合需要特定高版本(如 Python 3.11 或 3.12)或需要开启 PGO/LTO 深度优化的场景。无论采用哪种路径,核心原则都是严格保护系统底层自带的 Python 环境不被破坏,避免引发系统包管理器和管理工具崩溃。本文将按照实际操作顺序,分别详解这两种安装方式的完整命令、配置要点、共存机制与验证步骤。
一、安装方式选型:包管理器 vs 源码编译
在正式动手前,需要根据业务项目的实际诉求做出技术选型。CentOS 与 RHEL 属于以稳定性著称的企业级发行版,其软件仓库对核心软件包的更新策略较为保守。不同的安装方案在交付耗时、维护便利度以及版本灵活性上存在显著差异。
| 比较维度 | 方案 A:包管理器安装 (DNF / YUM) | 方案 B:源码编译安装 (make altinstall) |
|---|---|---|
| 命令复杂度 | 单条命令完成依赖与本体安装 | 需要配置 C 工具链、安装依赖、编译、设置环境变量 |
| 耗时预估 | 1 至 3 分钟 | 8 至 20 分钟(取决于 CPU 核心数与优化选项) |
| 版本获取自由度 | 固定在软件源预设版本(如 3.6、3.9 等) | 任意 Python 官方发布的版本均可自由安装 |
| 执行性能优化 | 标准发行版通用编译参数 | 可针对主机 CPU 开启 --enable-optimizations 与 LTO |
| 安全补丁升级 | 随系统 dnf update / yum update 自动维护 |
需手动下载新版小版本源码重新编译 |
如果服务器主要运行基础自动化脚本、Ansible 节点管理或对 Python 版本无硬性要求,推荐直接使用方案 A;如果是部署现代 Web 应用、机器学习推理服务,或者三方库明确要求 Python ≥ 3.10,则应当采用方案 B 进行源码编译。
二、方法一:使用包管理器快速安装 Python 3
使用系统包管理器是最快获得 Python 3 解释器的方式。由于 CentOS/RHEL 7 与 8/9 的软件仓库管理机制不同,具体执行命令有所区别。
1. CentOS 7 / RHEL 7 环境下的安装步骤
CentOS 7 官方 Base 源默认提供的是 Python 2.7,Python 3 需要通过 EPEL(Extra Packages for Enterprise Linux)扩展源或者官方更新源获取。
首先更新包索引并安装 EPEL 仓库:
执行命令sudo yum install -y epel-release
接着直接安装 Python 3 及配套的包管理工具 pip:
执行命令sudo yum install -y python3 python3-pip python3-devel
安装完成后,系统会在 /usr/bin/ 目录下生成 python3 和 pip3 的可执行链接。检查安装结果:
python3 --version && pip3 --version
示例输出
Python 3.6.8
pip 9.0.3 from /usr/lib/python3.6/site-packages (python 3.6)
2. CentOS Stream 8/9 及 RHEL 8/9 环境下的安装步骤
从 RHEL 8 开始,系统引入了 AppStream 模块化软件仓库,包管理器也升级为 DNF。在 RHEL 8 和 9 中,Python 3 是作为一等公民内置支持的,甚至可以选择不同的版本模块(如 python38、python39 或 python311)。
在 RHEL 8 / CentOS Stream 8 中安装默认 Python 3(通常为 Python 3.6 或 3.8):
执行命令sudo dnf install -y python3 python3-pip python3-devel
如果希望在 RHEL 8/9 中安装更高版本的模块(例如 Python 3.11):
执行命令# 查询可用的 Python 模块
sudo dnf module list python*
# 启用并安装指定版本的 Python 模块
sudo dnf module enable -y python311
sudo dnf install -y python3.11 python3.11-pip python3.11-devel
在 RHEL 9 / CentOS Stream 9 中,默认提供的 Python 已经升级为 Python 3.9,直接执行安装即可:
执行命令sudo dnf install -y python3 python3-pip python3-devel
示例输出
Python 3.9.18
pip 21.2.3 from /usr/lib/python3.9/site-packages/pip (python 3.9)
三、方法二:从源码编译安装指定版本 Python 3
当软件仓库提供的版本无法满足业务依赖(例如需要 Python 3.11 的异常回溯性能优化或 3.12 的隔离子解释器特性)时,从官方源码自主编译是标准做法。以下以安装 Python 3.11.8 为例,演示完整编译链路。
步骤 1:安装编译工具链与底层开发依赖
Python 解释器在编译阶段需要调用系统的 C 编译器(GCC)、构建工具(Make)以及解析各类格式所需的开发包(Headers)。若缺少对应开发库,编译虽然可能勉强完成,但会导致 ssl、ctypes、bz2 等核心模块缺失。
sudo yum groupinstall -y "Development Tools"
sudo yum install -y openssl-devel bzip2-devel libffi-devel zlib-devel xz-devel sqlite-devel readline-devel tk-devel gdbm-devel ncurses-devel
RHEL 8/9 / CentOS Stream 8/9 执行命令
sudo dnf groupinstall -y "Development Tools"
sudo dnf install -y openssl-devel bzip2-devel libffi-devel zlib-devel xz-devel sqlite-devel readline-devel tk-devel gdbm-devel ncurses-devel
步骤 2:下载官方源码并核验文件完整性
建议进入 /usr/local/src 目录存放下载的源码包。请直接通过 Python 官方站点获取原始归档文件,并核对哈希值:
cd /usr/local/src
sudo wget https://www.python.org/ftp/python/3.11.8/Python-3.11.8.tgz
# 校验下载文件的哈希值
sha256sum Python-3.11.8.tgz
示例输出
9e5585880969804668cee82c7139046337d63503cba14207108863249f71071b Python-3.11.8.tgz
确认无误后解压源码包并进入构建目录:
执行命令sudo tar -xzf Python-3.11.8.tgz
cd Python-3.11.8
步骤 3:配置编译选项与运行期性能优化
在执行 ./configure 时,强烈建议添加 --enable-optimizations 参数。该参数会启用 PGO(Profile Guided Optimization,基于性能分析的优化),通过运行基准测试收集执行特征并优化机器指令,通常能使最终的 Python 解释器运算性能提升 10% 到 20%。
sudo ./configure --prefix=/usr/local --enable-optimizations --with-lto --enable-shared=no
参数解析:--prefix=/usr/local 确保可执行文件写入标准的三方软件路径 /usr/local/bin;--with-lto 开启链接时优化;--enable-shared=no 默认采用静态链接,避免生成复杂的 libpython 动态库寻址路径问题。
步骤 4:多核心并行编译
通过 nproc 命令获取服务器实际的 CPU 逻辑核心数,并使用 -j 选项开启多核并发编译以缩短构建时间:
# 启动多核心编译
sudo make -j $(nproc)
注意事项:由于开启了 --enable-optimizations,编译过程中会自动运行大量单元测试用于搜集剖析数据,全过程通常需要 5 到 15 分钟。如果服务器内存小于 2GB,建议将并发数限制为 make -j 2,防止内存耗尽触发 Linux 内核的 OOM Killer 杀掉编译进程。
步骤 5:关键安全安装:使用 make altinstall
编译成功后,必须使用 make altinstall 替代传统的 make install。这是在 Linux 生产环境中编译 Python 最关键的命令:
sudo make altinstall
make install 会自动创建名为 python3 和 python 的可执行文件及软链接,这极可能覆盖掉操作系统自带的 /usr/bin/python3。而 make altinstall 只会生成带具体小版本号的文件(例如 /usr/local/bin/python3.11 和 /usr/local/bin/pip3.11),从而彻底杜绝与系统组件冲突的风险。
步骤 6:确认安装位置与可执行权限
安装完成后,检查 /usr/local/bin 目录下生成的二进制文件:
/usr/local/bin/python3.11 --version
/usr/local/bin/pip3.11 --version
示例输出
Python 3.11.8
pip 24.0 from /usr/local/lib/python3.11/site-packages/pip (python 3.11)
四、关键安全原则:系统依赖与多版本共存
许多初学者在安装完新版本 Python 后,习惯性执行 ln -sf /usr/local/bin/python3.11 /usr/bin/python,试图让全局直接输入 python 就能调出新版本。这种做法在 CentOS 与 RHEL 上是严重的操作禁忌。
为什么绝对不能覆盖系统默认 Python?
-
CentOS 7 的 yum 崩溃风险:CentOS 7 的包管理器
yum及其核心组件urlgrabber是由 Python 2.7 编写的脚本,其首行声明为#!/usr/bin/python。如果将/usr/bin/python强制指向 Python 3,由于 Python 2 与 Python 3 在 print 语法、字符编码等机制上完全不兼容,后续执行任何yum命令都会直接抛出SyntaxError: invalid syntax并终止,导致服务器失去软件包管理能力。 -
RHEL 8/9 的平台运行隔离:RHEL 8/9 虽然将系统内部管理工具重构并指向了内部私有的
/usr/libexec/platform-python,但/usr/bin/python3依然受到系统alternatives系统和 DNF 模块的管理。擅自篡改软链接同样会干扰系统补丁升级与底层服务守护进程(如firewalld、tuned等)。
多版本安全共存的最佳实践
在多版本共存场景下,实现便捷调用的正确做法有两种:
做法 A:配置局部或用户级别名(Alias)
如果希望日常登录终端时键入 py11 即可直接启动,可在当前用户的 ~/.bashrc 中添加别名,而不影响系统全局环境:
echo "alias py11='/usr/local/bin/python3.11'" >> ~/.bashrc
source ~/.bashrc
做法 B:建立带有明确版本号的软链接
如果 /usr/local/bin 已经包含在系统的 PATH 环境变量中(绝大多数 CentOS/RHEL 默认包含),直接在脚本和命令行中使用 python3.11 即可精确调用对应解释器,互不干扰。
五、安装后验证与工作环境配置
安装完成后,需要通过系统性检查确认 Python 3 的各项基础运行库正常,并为日常开发配置高效、隔离的工作空间。
1. 关键模块联动验证
最核心的检查项目是验证 Python 是否正确链接了 OpenSSL。如果 SSL 模块缺失,后续使用 pip 下载依赖时将无法通过 HTTPS 握手。
执行检查命令/usr/local/bin/python3.11 -c "import ssl; print('OpenSSL 版本:', ssl.OPENSSL_VERSION)"
/usr/local/bin/python3.11 -c "import ctypes; print('ctypes 模块就绪')"
/usr/local/bin/python3.11 -c "import zlib; print('zlib 模块就绪')"
正常输出示例
OpenSSL 版本: OpenSSL 1.1.1k FIPS 25 Mar 2021
ctypes 模块就绪
zlib 模块就绪
2. 配置 pip 国内镜像加速源
默认情况下 pip 会连接官方海外源,国内服务器下载经常出现超时或连接中断。可通过内置配置命令将 PyPI 源切换为国内知名开源镜像站:
配置阿里云或清华大学镜像源/usr/local/bin/pip3.11 config set global.index-url https://mirrors.aliyun.com/pypi/simple/
/usr/local/bin/pip3.11 config set install.trusted-host mirrors.aliyun.com
同时升级 pip 自身到最新版本:
执行命令/usr/local/bin/python3.11 -m pip install --upgrade pip
3. 使用 venv 创建独立的虚拟环境
在生产环境中,严禁直接使用 pip3.11 install ... 将业务包安装到全局环境。使用 Python 自带的 venv 模块为每个项目构建隔离的依赖目录是官方标准规范:
# 1. 创建项目专属目录并进入
mkdir -p /opt/myproject && cd /opt/myproject
# 2. 基于 Python 3.11 构建名为 .venv 的独立虚拟沙箱
/usr/local/bin/python3.11 -m venv .venv
# 3. 激活虚拟环境
source .venv/bin/activate
# 激活后终端提示符会出现 (.venv) 前缀,此时 python 和 pip 直接映射到虚拟环境内部
( .venv ) $ python -V
Python 3.11.8
# 4. 在隔离环境中安全安装业务依赖
( .venv ) $ pip install requests fastapi uvicorn
# 5. 固化当前依赖清单
( .venv ) $ pip freeze > requirements.txt
# 6. 项目维护完毕退出沙箱
( .venv ) $ deactivate
六、常见编译报错与排查指南
如果在源码编译或初次运行过程中遇到报错,通常是由于系统开发库残缺或硬件限制所致,可对照以下方案逐一排查。
问题 1:pip 安装报 SSL: CERTIFICATE_VERIFY_FAILED 或 No module named '_ssl'
原因:编译 Python 源码时,系统中未安装 openssl-devel,或者 CentOS 7 自带的 OpenSSL 1.0.2 版本过旧(Python 3.10 及以上版本要求 OpenSSL ≥ 1.1.1)。
修复方法:在 CentOS 7 上,如果提示 OpenSSL 版本过低,需通过 EPEL 安装 openssl11-devel,并在 ./configure 时指定链接路径:
sudo yum install -y openssl11-devel
export CFLAGS=$(pkg-config --cflags openssl11)
export LDFLAGS=$(pkg-config --libs openssl11)
./configure --prefix=/usr/local --enable-optimizations
make -j $(nproc) && sudo make altinstall
问题 2:执行时报 ModuleNotFoundError: No module named '_ctypes'
原因:Python 3.7 及以上版本的标准库依赖外部的 libffi 库来支持 C 语言外部函数接口(ctypes)。如果编译前未安装开发头文件,构建时该模块会被自动跳过。
修复方法:补齐底层包并重新执行安装命令:
sudo yum install -y libffi-devel # CentOS 7
# 或 sudo dnf install -y libffi-devel # CentOS 8/9 / RHEL
cd /usr/local/src/Python-3.11.8
sudo make altinstall
问题 3:编译过程中断并显示 gcc: fatal error: Killed process
原因:由于开启了 --enable-optimizations,编译器在进行复杂算法优化和测试用例分析时会消耗大量内存。若服务器物理内存较小(如 1GB 或 2GB)且未开启 Swap 交换分区,系统会因内存耗尽直接触发 OOM 杀掉编译任务。
修复方法:
- 降低并行任务数,将
make -j $(nproc)降为make -j 2或单核make。 - 临时创建 2GB 的虚拟交换分区(Swap):
sudo dd if=/dev/zero of=/swapfile bs=1M count=2048
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
# 重新执行编译
sudo make -j 2 && sudo make altinstall
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













