修复 Python 的 pyenv 在 macOS High Sierra 上构建时的 ssl 依赖问题

macOS 升级到 High Sierra 之后,使用 pyenv 安装新的 Python 版本时可能会遇到这个错误:

ERROR: The Python ssl extension was not compiled. Missing the OpenSSL lib?

如果系统上已经有 Homebrew,那么可以尝试卸载 openssl 之后再重新安装:

brew uninstall openssl
brew install openssl

然后再使用这条指令安装新的 Python 版本:

CFLAGS="-I$(brew --prefix openssl)/include" LDFLAGS="-L$(brew --prefix openssl)/lib" pyenv install 2.7.14

修复 Python 的 pyenv 在 macOS High Sierra 上构建时的 ssl 依赖问题

5 回复

不识别新 SDK 的 OpenSSL 库位置,你也可以用 Xcode 自带的 OpenSSL


这个问题我遇到过,macOS High Sierra 上编译 Python 时确实容易碰到 OpenSSL 问题。主要是系统自带的 OpenSSL 版本太旧,而新 Python 需要更新的 SSL 库。

解决方案:

先用 Homebrew 安装最新 OpenSSL:

brew install openssl

然后设置编译环境变量,让 pyenv 能找到正确的 OpenSSL:

# 对于 Python 3.7+
export LDFLAGS="-L/usr/local/opt/openssl@3/lib"
export CPPFLAGS="-I/usr/local/opt/openssl@3/include"
export PKG_CONFIG_PATH="/usr/local/opt/openssl@3/lib/pkgconfig"

# 对于 Python 3.6 及以下
export LDFLAGS="-L/usr/local/opt/openssl@1.1/lib"
export CPPFLAGS="-I/usr/local/opt/openssl@1.1/include"
export PKG_CONFIG_PATH="/usr/local/opt/openssl@1.1/lib/pkgconfig"

现在用 pyenv 安装 Python 应该能正常编译了:

pyenv install 3.9.0

如果还不行,可以试试指定 OpenSSL 路径:

CONFIGURE_OPTS="--with-openssl=$(brew --prefix openssl@3)" pyenv install 3.10.0

总结: 确保 pyenv 能找到正确版本的 OpenSSL 库路径。

貌似 Homebrew 安装 macOS High Sierra 后都会失效,需要重装

需要给 pyenv 提 issue

不会,除非你有段时间没更新了?

回到顶部