必须用 make altinstall 而非 make install,因后者会生成无版本号的 /usr/local/bin/python 和 pip,覆盖或干扰系统依赖的 Python 2.7,导致 yum 等工具崩溃;altinstall 仅安装 python3.9 和 pip3.9,保留 python→python2 的原始映射,确保双版本安全共存。

不能也不该升级系统自带的 Python 2.7,只能安全安装 Python 3.9 并保持双版本共存。 CentOS 7 的 yum、firewalld、urlgrabber-ext-down 等核心工具硬编码依赖 /usr/bin/python 指向 Python 2.7;一旦覆盖或重指向,立即报 SyntaxError: invalid syntax 或 ImportError: No module named site,系统包管理即瘫痪。
为什么必须用 make altinstall 而不是 make install
make install 会生成 /usr/local/bin/python 和 /usr/local/bin/pip,与系统原有命令冲突风险极高,且极易被 PATH 优先调用导致意外;make altinstall 则只生成带完整版本号的二进制:python3.9 和 pip3.9,完全不触碰 python、python3、pip 这些无版本号命令,是唯一可回退、可验证的安全方式。
执行后检查:
-
ls /usr/local/bin/python*应只看到python3.9(可能还有python3,但绝不能有python) -
ls /usr/bin/python*应仍为python → python2,python2、python3均存在且可用 - 若误运行
make install,需手动清理/usr/local/bin/python*中无版本号的文件
configure 必加的三个参数缺一不可
漏掉任一参数,后续 pip 无法联网、SSL 请求失败、C 扩展(如 numpy)编译报错或运行时报 ModuleNotFoundError: No module named '_ctypes':
让 macOS 自动化像说话一样简单 —— 用代码控制你的 Mac,无需学习 AppleScript 系统要求 macOS 14+ (Sonoma) Python 3.9+ 需要开启:辅助功能 + 屏幕录制权限
立即学习“Python免费学习笔记(深入)”;
-
--enable-shared:生成libpython3.9.so.1.0,否则扩展模块链接失败 -
--with-ensurepip=install:内置pip3.9,避免后续手动装get-pip.py因缺 ssl 模块而卡死 -
--prefix=/usr/local:标准路径,确保/usr/local/bin在默认PATH中;不要用/opt/python39等自定义路径
推荐完整命令:./configure --enable-optimizations --enable-shared --with-ensurepip=install --prefix=/usr/local --with-ssl
共享库加载失败:error while loading shared libraries: libpython3.9.so.1.0
这不是环境变量问题,LD_LIBRARY_PATH 临时设置既不安全也不持久。真实原因是动态链接器未扫描 /usr/local/lib:
- 新建配置:
echo "/usr/local/lib" | sudo tee /etc/ld.so.conf.d/python3.9.conf - 刷新缓存:
sudo ldconfig - 验证是否生效:
ldconfig -p | grep python3.9应输出对应 so 路径
这个步骤在启用 --enable-shared 后不可跳过——它决定了你装完能不能真正跑起来。很多用户编译成功却卡在 import ssl 失败,根源就在这里。

















