结论:centos 7/8 安装 python 3.9 必须源码编译并执行 make altinstall,禁用 make install 和 yum install python3.9(官方仓库无此包);关键参数为 --enable-shared --with-ensurepip=install --prefix=/usr/local,安装后需配置 /etc/ld.so.conf.d/python3.9.conf 并运行 ldconfig 解决共享库加载问题。

直接说结论:CentOS 7/8 上装 Python 3.9,优先用源码编译 + make altinstall,别碰 yum install python3.9(EPEL 里压根没这个包)。系统自带的 python3 最高只到 3.6(CentOS 7)或 3.8(CentOS 8),想用 3.9 必须自己编译。
为什么 yum install python3.9 会失败
CentOS 官方仓库和 EPEL 都不提供 python3.9 包:yum install python3.9 会报错 No package python3.9 available。网上有些教程说“启用 SCL”就能装,但 CentOS 8 已废弃 SCL,CentOS 7 的 python39 SCL 包实际是 3.9.13+,且需手动启用、环境隔离复杂,不适合通用开发场景。
-
yum install python3装的是系统默认版本(CentOS 7 是 3.6.8,CentOS 8 是 3.8.8),不是 3.9 - 所谓 “
centos-release-scl+python39” 方案,安装后命令是python3.9,但所有依赖(如pip3.9、venv)都得在scl enable python39 bash下才能用,一退出就失效 - 生产环境不推荐 SCL,因为路径、环境变量、systemd 服务调用都容易出错
configure 必加的三个参数
解压源码后执行 ./configure,漏掉任意一个,后续大概率 pip 报错、SSL 失效、C 扩展编译失败。
-
--enable-shared:生成libpython3.9.so,否则numpy、cryptography等扩展 import 时会报undefined symbol: Py_Initialize -
--with-ensurepip=install:强制安装pip3.9。不加的话,python3.9 -m ensurepip往往因缺 SSL 模块而失败 -
--prefix=/usr/local:统一安装到标准位置。别用--prefix=/opt/python39这类自定义路径,否则要反复折腾LD_LIBRARY_PATH和PATH
完整命令示例:./configure --enable-optimizations --enable-shared --with-ensurepip=install --prefix=/usr/local
make altinstall 是硬性要求,不是可选项
make install 会往 /usr/bin/ 写 python 和 pip 两个无版本号的命令,直接覆盖系统原有链接 —— CentOS 7/8 的 yum 脚本第一行是 #!/usr/bin/python,指向 Python 2.7,一旦被改成 3.9 就立即报错:ImportError: No module named site 或直接语法错误,yum 彻底瘫痪。
- 必须用
sudo make altinstall,它只生成python3.9和pip3.9,不碰python/pip - 验证是否安全:
ls /usr/bin/python*输出里不应出现python -> python3.9或pip -> pip3.9 - 如果已误执行
make install,立刻用rpm -qf /usr/bin/python查归属包,再sudo yum reinstall python恢复
装完跑不起来?八成是共享库没加载
执行 python3.9 --version 报错:error while loading shared libraries: libpython3.9.so.1.0: cannot open shared object file —— 这说明动态链接器找不到 .so 文件。
- Python 默认把
.so装到/usr/local/lib,但系统不会自动扫描这个路径 - 解决方法不是临时加
LD_LIBRARY_PATH(不安全、不持久),而是让系统级链接器识别:echo "/usr/local/lib" | sudo tee /etc/ld.so.conf.d/python3.9.confsudo ldconfig - 验证:
ldconfig -p | grep python3.9应能看到libpython3.9.so.1.0
最后提醒一句:CentOS 7/8 已停止维护(EOL),但如果你还在用,务必保留系统自带的 Python 2.7 和 Python 3.6/3.8 不动,所有新项目明确用 python3.9 命令启动,虚拟环境也用 python3.9 -m venv myenv 创建 —— 版本混用本身不危险,危险的是动了 /usr/bin/python 这个 symlink。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











