如何在RHEL上编译支持SSL的Python3?SSL模块无法导入问题求助
问题原因
- 对
--with-openssl参数的含义理解错误:openssl version -d返回的OPENSSLDIR是OpenSSL存放配置、证书的目录,不是编译时需要的开发库根目录,该参数需要指向包含include/openssl/ssl.h头文件和对应lib动态库目录的父路径。 - 手动创建的软链接逻辑错误:将头文件目录直接软链接到
/etc/ssl/lib完全不符合编译时的头文件、库文件查找规则,反而会污染系统目录结构。 - 系统全局缺少OpenSSL 1.1.1系列的开发组件:从你给出的
/usr/lib64查询结果看,没有libssl.so.1.1文件,说明你看到的openssl 1.1.1l大概率是自定义安装在非系统路径下的版本,全局的头文件、动态库仍然是旧的1.0.2k版本,Python编译时无法识别到符合要求的版本。
解决方案
步骤1:清理错误配置
先删除你之前创建的错误软链接,避免影响后续操作:
sudo unlink /etc/ssl/lib
步骤2:安装正确的OpenSSL 1.1开发包
优先使用RHEL官方源提供的包,避免自行编译的兼容性问题:
- 如果你使用RHEL 8/9 或 CentOS 8/9 版本:
sudo dnf install openssl-devel -y - 如果你使用RHEL 7 或 CentOS 7 版本:
sudo yum install epel-release -y sudo yum install openssl11 openssl11-devel -y
如果你是自行源码编译安装的OpenSSL 1.1.1l,记录你当时编译时指定的--prefix安装路径(例如/usr/local/openssl11),后续直接使用该路径即可。
步骤3:重新配置Python编译参数
进入Python源码目录,先清理之前的编译缓存:
make clean
根据你的OpenSSL安装情况,选择对应的configure命令:
- 使用系统官方源安装的OpenSSL开发包:
./configure --with-openssl=/usr --with-openssl-rpath=auto --enable-optimizations - 使用自行编译的OpenSSL(假设安装路径为
/usr/local/openssl11):./configure --with-openssl=/usr/local/openssl11 --with-openssl-rpath=auto --enable-optimizations
步骤4:编译安装
make -j$(nproc) sudo make altinstall
注意:使用altinstall而非install,避免覆盖系统默认的Python版本,引发系统组件异常。
验证
安装完成后执行以下命令验证SSL模块是否正常加载、版本是否正确:
python3.10 -c "import ssl; print(ssl.OPENSSL_VERSION)"
内容的提问来源于stack exchange,提问作者neogeek23
相关产品推荐
相关产品推荐

