不能直接升级系统Python 2,必须并行安装Python 3.10并严格隔离;CentOS 7官方仓库的python3最高仅3.6且缺失SSL模块,因依赖旧版OpenSSL 1.0.2,而Python 3.10需OpenSSL 1.1.1+,否则import ssl失败、pip无法连接HTTPS源;须先手动编译安装OpenSSL 1.1.1q并指定--with-openssl路径,再用make altinstall避免覆盖系统Python,严禁修改/usr/bin/python。

不能直接“升级”系统 Python 2,必须并行安装 Python 3.10 并严格隔离;强行替换 /usr/bin/python 会导致 yum、firewalld 等关键服务崩溃。
为什么不能用 yum install python3 替代源码编译?
CentOS 7 官方仓库中的 python3 最高只到 3.6,且不带 ssl 模块(因依赖旧版 OpenSSL 1.0.2)。Python 3.10 要求 OpenSSL 1.1.1+,否则运行 import ssl 报 ModuleNotFoundError: No module named '_ssl',pip 也无法连接 HTTPS 源。
必须先升级 OpenSSL 1.1.1 再编译 Python 3.10
CentOS 7 默认 OpenSSL 是 1.0.2k-fips,Python 3.10 编译时即使装了 openssl-devel,也找不到新版头文件和库。需手动编译安装 OpenSSL 1.1.1q(推荐):
- 下载解压:
wget https://www.openssl.org/source/openssl-1.1.1q.tar.gz && tar -xzf openssl-1.1.1q.tar.gz - 编译安装:
cd openssl-1.1.1q && ./config --prefix=/usr/local/ssl --openssldir=/usr/local/ssl shared zlib && make && sudo make install - 创建软链供 Python 编译识别:
sudo ln -sf /usr/local/ssl/lib64/libssl.so.1.1 /usr/lib64/libssl.so.1.1和sudo ln -sf /usr/local/ssl/lib64/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1 - 确认生效:
pkg-config --modversion openssl应输出1.1.1q
configure 时必须显式指定 OpenSSL 路径
否则 Python 编译器会继续找系统自带的 1.0.2 头文件,导致 SSL 模块静默失败。正确命令是:
快速生成专业的 Python 脚本和应用代码。一键创建完整项目结构,支持CLI、API、爬虫、Bot、Django等多种项目类型,包含完整的项目结构、配置文件、依赖管理、测试、README和文档。
立即学习“Python免费学习笔记(深入)”;
./configure --enable-optimizations \ --with-openssl=/usr/local/ssl \ --prefix=/usr/local/python3.10
关键点:
-
--with-openssl必须指向你刚装的/usr/local/ssl,不是/usr或/usr/include/openssl - 不要用
make install(会覆盖系统python),改用make altinstall - 安装后验证:
/usr/local/python3.10/bin/python3.10 -c "import ssl; print(ssl.OPENSSL_VERSION)"输出应含1.1.1q
别碰 /usr/bin/python,yum 依赖它
系统工具如 yum、dnf、systemctl 脚本硬编码调用 #!/usr/bin/python,该路径必须指向 Python 2.7。若你执行了 ln -sf python3 /usr/bin/python:
-
yum update直接报错退出,无法修复系统 - 后续所有依赖
yum的操作(如装新包、打补丁)全部中断 - 真正安全的做法:只用
python3.10命令,或为项目加PATH=/usr/local/python3.10/bin:$PATH
最易被忽略的一点:即使 Python 3.10 编译启用了 SSL,若未配置 CA 证书路径,pip 仍会报 SSLError("Can't connect to HTTPS URL...") —— 这时要手动设置 SSL_CERT_FILE=/etc/pki/tls/certs/ca-bundle.crt 或在 ~/.pip/pip.conf 中指定 global.trusted-host = mirrors.aliyun.com(仅临时绕过,不推荐生产环境)。

















