必须用make altinstall而非make install,因后者会覆盖/usr/bin/python导致yum崩溃;altinstall仅安装python3.9和pip3.9,配合--enable-shared、--with-ensurepip=install、--prefix=/usr/local及ldconfig配置方可正常使用。

不能也不该把 /usr/bin/python 指向 Python 3.9——CentOS 7 的 yum、firewalld、urlgrabber-ext-down 全部硬依赖 Python 2.7,改错 shebang 就会直接瘫痪包管理。
为什么必须用 make altinstall 而不是 make install
make install 会在 /usr/local/bin/ 下生成 python 和 pip 两个无版本号命令,一旦被 PATH 优先匹配,或被手动软链覆盖系统路径,就会导致:
-
yum启动时报ImportError: No module named site -
firewalld无法启动,提示SyntaxError: invalid syntax(Python 3 解析 Python 2 的 print 语句失败) - 所有依赖
#!/usr/bin/python的系统脚本集体失效
make altinstall 只安装带明确版本号的二进制:python3.9 和 pip3.9,不碰 python、pip 这类无版本名命令,是唯一可接受的操作。
./configure 必须加的三个参数
漏掉任意一个,后续 pip 无法联网、SSL 失效、C 扩展编译失败:
-
--enable-shared:生成libpython3.9.so,否则numpy、cryptography等扩展链接时报undefined reference to Py_Initialize -
--with-ensurepip=install:内置安装pip3.9,避免手动跑get-pip.py时因缺 ssl 模块而卡死 -
--prefix=/usr/local:标准路径,/usr/local/bin默认在 PATH 中;不要用/opt/python39或/usr/local/python3.9,否则要反复调 PATH 和 LD_LIBRARY_PATH
完整命令示例:./configure --enable-optimizations --enable-shared --with-ensurepip=install --prefix=/usr/local
python3.9 --version 报 shared libraries 错误怎么办
错误信息:error while loading shared libraries: libpython3.9.so.1.0: cannot open shared object file
这不是 PATH 问题,也不是临时设 LD_LIBRARY_PATH 能解决的(不安全且每次都要重设):
- 新建配置:
echo "/usr/local/lib" | sudo tee /etc/ld.so.conf.d/python3.9.conf - 刷新缓存:
sudo ldconfig - 验证是否生效:
ldconfig -p | grep python3.9应输出对应 so 路径
这个步骤在启用 --enable-shared 后不可跳过——它决定了你装完能不能真正跑起来。真正的麻烦不在编译,而在系统级路径和符号链接的隐式耦合。哪怕所有命令都对了,漏掉这一步,python3.9 就只是个摆设。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











