从源码安装Python3.11.1时SSL模块缺失求助(已装OpenSSL)
解决Python3.11.1源码编译后venv中pip无法使用SSL的问题
核心原因
Ubuntu 16.04默认提供的OpenSSL版本为1.0.2,而Python 3.10及以上版本仅支持OpenSSL 1.1.1及更高版本——即使安装了libssl-dev,版本不匹配也会导致Python编译时无法正常构建SSL模块。
解决步骤
1. 检查当前OpenSSL版本
执行命令确认版本:
openssl version
若输出为OpenSSL 1.0.2*,则必须升级OpenSSL。
2. 手动编译安装OpenSSL 1.1.1(LTS版本)
# 下载OpenSSL 1.1.1w wget https://www.openssl.org/source/openssl-1.1.1w.tar.gz tar -xzf openssl-1.1.1w.tar.gz cd openssl-1.1.1w # 编译安装到/usr/local/ssl目录 ./config --prefix=/usr/local/ssl --openssldir=/usr/local/ssl shared zlib make -j$(nproc) sudo make install
3. 配置系统优先使用新OpenSSL
# 配置动态链接库路径 echo "/usr/local/ssl/lib" | sudo tee /etc/ld.so.conf.d/openssl-1.1.1.conf sudo ldconfig # 更新环境变量,让系统优先调用新OpenSSL echo "export PATH=/usr/local/ssl/bin:\$PATH" | sudo tee /etc/profile.d/openssl.sh source /etc/profile.d/openssl.sh # 验证版本更新结果 openssl version
此时应输出OpenSSL 1.1.1w或更高版本。
4. 重新编译Python3.11.1
先清理之前的编译残留:
cd Python-3.11.1 make clean sudo rm -rf /opt/python/3.11.1
重新执行configure(指定新的OpenSSL路径):
./configure \ --prefix=/opt/python/3.11.1 \ --enable-shared \ --enable-optimizations \ --enable-ipv6 \ --with-openssl=/usr/local/ssl \ --with-openssl-rpath=auto \ LDFLAGS=-Wl,-rpath=/opt/python/3.11.1/lib:/usr/local/ssl/lib,--disable-new-dtags
编译并安装:
make -j$(nproc) sudo make altinstall
5. 验证SSL模块是否正常
/opt/python/3.11.1/bin/python3.11 -c "import ssl; print(ssl.OPENSSL_VERSION)"
若输出新安装的OpenSSL版本,说明SSL模块构建成功。
6. 测试venv中的pip
/opt/python/3.11.1/bin/python3.11 -m venv test_venv source test_venv/bin/activate pip install numpy
额外排查点
- 执行
./configure后,检查输出日志中是否有SSL modules will be built的提示;若没有,查看config.log文件中的错误信息定位问题。 - 确保安装Python前已安装完整依赖:
zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev libffi-dev liblzma-dev
内容的提问来源于stack exchange,提问作者Racid
相关产品推荐
相关产品推荐

