You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu 22.04下pyenv安装Python报缺失OpenSSL致SSL扩展未编译

pyenv安装Python版本提示SSL扩展未编译、缺少OpenSSL库的解决方法

问题复现场景

  • 全新安装Ubuntu 22.04系统(另一分区保留原有Ubuntu 20系统),配置pyenv工作环境阶段,执行pyenv install <版本号>安装Python时抛出报错:ERROR: The Python ssl extension was not compiled. Missing the OpenSSL lib?
  • 参照pyenv官方文档的常见问题方案操作时,无法理解官方编译命令中<openssl install prefix>参数的含义,官方给出的参考命令如下:
CPPFLAGS="-I<openssl install prefix>/include" \
LDFLAGS="-L<openssl install prefix>/lib" \
pyenv install -v <python version>
  • 初期误将该参数理解为OpenSSL配置目录,执行openssl version -d得到返回值OPENSSLDIR: "/home/linuxbrew/.linuxbrew/etc/openssl@1.1",在发现该路径下不存在include、lib子文件夹的情况下,仍尝试将该路径代入命令安装Python 3.10.0,执行命令如下,运行后依旧抛出相同错误:
CPPFLAGS="-I/home/linuxbrew/.linuxbrew/etc/openssl@1.1/include" \
LDFLAGS="-L/home/linuxbrew/.linuxbrew/etc/openssl@1.1/lib" \
pyenv install -v 3.10.0
  • 尝试多份网络检索到的第三方方案均未生效,优先基于官方指引逻辑排查问题。

核心原因

<openssl install prefix>指代的是OpenSSL的根安装目录,而非openssl version -d返回的OpenSSL配置文件存储目录。后者仅存放OpenSSL的证书、运行配置文件,不包含Python编译依赖的头文件(include目录)和动态链接库(lib目录),路径代入后自然无法找到依赖文件。

对应解决方案

场景1:通过Linuxbrew/ Homebrew安装OpenSSL

不需要手动拼接路径,直接通过brew内置命令获取正确的OpenSSL根安装路径即可,执行以下命令安装目标Python版本:

CPPFLAGS="-I$(brew --prefix openssl)/include" \
LDFLAGS="-L$(brew --prefix openssl)/lib" \
pyenv install -v 3.10.0

执行安装前可先单独运行brew --prefix openssl,确认返回的路径下确实存在include和lib子文件夹,避免路径偏差。

场景2:通过apt安装系统级OpenSSL(Ubuntu 22.04默认场景)

先安装Python编译所需的全量依赖包(含OpenSSL开发版),安装完成后直接执行pyenv安装命令即可,不需要手动指定编译参数:

sudo apt update
sudo apt install -y libssl-dev build-essential zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev
pyenv install -v 3.10.0

注意事项

不同环境下OpenSSL的安装路径存在差异,不要直接照搬网络上的固定路径值,确认路径下存在编译需要的对应子目录后再代入参数,否则会反复触发相同报错。


内容的提问来源于stack exchange,提问作者Pere Picornell

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 04:36:23