Python 3.8指定OpenSSL编译后无法导入_ssl模块求助
安装Python 3.8时_ssl模块缺失问题排查与解决建议
问题场景
在非标准路径(/home/username/Python-3.8.0和/home/username/openssl)安装Python 3.8和OpenSSL 1.1.1,已在.bashrc中配置OpenSSL库路径,执行./configure --prefix=$HOME/Python-3.8.0 --with-openssl=$HOME/openssl完成配置,再执行make/make install后,导入ssl模块时出现以下错误:
>>> import ssl Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/home/username/lib/python3.8/ssl.py", line 98, in <module> import _ssl # if we can't import it, let the error propagate ModuleNotFoundError: No module named '_ssl'
相关配置文件内容
.bashrc配置
export PATH=$HOME/openssl/bin:$PATH export PATH=$HOME/opt/perl/bin:$PATH export LD_LIBRARY_PATH=$HOME/openssl/lib export LC_ALL="en_US.UTF-8" export LDFLAGS="-L $HOME/openssl/lib -Wl,-rpath,$HOME/openssl/lib" # Source global definitions if [ -f /etc/bashrc ]; then . /etc/bashrc fi # User specific aliases and functions alias python3="$HOME/bin/python3.8" eval "$(perl -I$HOME/perl5/lib/perl5 -Mlocal::lib)"
Python-3.8.0/Modules/Setup配置
... #SSL=$HOME/openssl #_ssl _ssl.c \ # -DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl \ # -L$(SSL)/lib -lssl -lcrypto ...
解决建议
- 确认OpenSSL安装有效性:执行
$HOME/openssl/bin/openssl version,检查输出是否为OpenSSL 1.1.1系列;同时确认$HOME/openssl/lib目录下存在libssl.so、libcrypto.so等库文件,确保OpenSSL编译安装无报错。 - 刷新环境变量并清理编译残留:执行
source ~/.bashrc使配置生效,进入Python源码目录后执行make clean清除之前的编译文件。 - 重新配置Python编译参数:在源码目录执行以下configure命令,新增
--with-openssl-rpath参数强制指定运行时库路径:./configure --prefix=$HOME/Python-3.8.0 --with-openssl=$HOME/openssl --with-openssl-rpath=$HOME/openssl/lib - 启用Modules/Setup中的SSL配置:编辑
Python-3.8.0/Modules/Setup,去掉SSL相关行的注释,修改为:
确保路径与你的OpenSSL实际安装路径一致。SSL=$HOME/openssl _ssl _ssl.c \ -DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl \ -L$(SSL)/lib -lssl -lcrypto - 重新编译安装:执行
make -j$(nproc)(利用多线程加速编译),完成后执行make install。 - 验证结果:启动Python 3.8交互环境,执行
import ssl,若未报错,再执行print(ssl.OPENSSL_VERSION)确认使用的是指定版本的OpenSSL。
内容的提问来源于stack exchange,提问作者Caleb Whittington
相关产品推荐
相关产品推荐

