在 macOS Mojave 上用 Python 的 pyenv 安装 3.6.8 时遇到 zlib not available 错误的解决方法
根据 Medium 上这篇文章的分享,用下面的指令可以安装成功。
https://medium.com/[@pimterry](/user/pimterry)/setting-up-pyenv-on-os-x-with-homebrew-56c7541fd331
CFLAGS="-I$(brew --prefix readline)/include -I$(brew --prefix openssl)/include -I$(xcrun --show-sdk-path)/usr/include" \
LDFLAGS="-L$(brew --prefix readline)/lib -L$(brew --prefix openssl)/lib" \
PYTHON_CONFIGURE_OPTS=--enable-unicode=ucs2 \
pyenv install 3.6.8
在 macOS Mojave 上用 Python 的 pyenv 安装 3.6.8 时遇到 zlib not available 错误的解决方法
我当时刚好也遇到了,用了另一个方法。我记得我也搜到这个方法,但是在我那里不好用。
xcode-select --install
sudo installer -pkg /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg -target /
参考 https://github.com/pyenv/pyenv/issues/1219
写的笔记记录在这: https://note.siwei.info/jupyter-notes/
在 macOS Mojave 上用 pyenv 安装 Python 3.6.8 时遇到 zlib not available 错误,通常是因为系统缺少必要的头文件或库。Mojave 之后,苹果把系统头文件移到了独立的 SDK 里,没装 Xcode 命令行工具或者没同意许可就容易出这问题。
解决步骤:
-
确保 Xcode 命令行工具已安装且许可已接受:
xcode-select --install sudo xcodebuild -license accept -
安装 macOS SDK 头文件(关键步骤):
sudo installer -pkg /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg -target /注意:如果找不到这个 .pkg 文件(某些 Command Line Tools 版本可能不包含),可以尝试跳过这步,直接进行第3步。
-
设置编译时的 SDK 路径(如果第2步无效或文件不存在): 在安装 Python 前,设置以下环境变量:
export CFLAGS="-I$(xcrun --show-sdk-path)/usr/include" export LDFLAGS="-L$(xcrun --show-sdk-path)/usr/lib"然后运行安装命令:
pyenv install 3.6.8 -
如果上述方法仍失败,可以尝试使用
pyenv的--patch选项,应用一个已知的补丁来修复 zlib 问题。首先保存以下内容为一个文件,例如python_3.6.8_zlib_fix.patch:diff --git a/setup.py b/setup.py index 715516b..5c65db7 100644 --- a/setup.py +++ b/setup.py @@ -756,6 +756,8 @@ class PyBuildExt(build_ext): # libffi first. We may move this down later. exts.append(Extension('_ctypes', ['_ctypes/_ctypes.c', '_ctypes/callbacks.c', + '_ctypes/callproc.c', + '_ctypes/stgdict.c', '_ctypes/cfield.c'], libraries=dummy_libraries, include_dirs=['_ctypes'], @@ -1520,7 +1522,7 @@ class PyBuildExt(build_ext): else: zlib_inc = find_file('zlib.h', [], inc_dirs) if zlib_inc is not None: - zlib_h = zlib_inc[0] + '/zlib.h' + zlib_h = zlib_inc[0] version = '"0.0.0"' version_req = '"1.1.3"' with open(zlib_h) as fp:然后使用补丁安装:
pyenv install --patch 3.6.8 < python_3.6.8_zlib_fix.patch
一句话总结: 先装好命令行工具并同意许可,再尝试设置 SDK 路径或打补丁。
我也遇到了这个问题,重装了 zlib
brew install zlib
cat >> ~/.zshrc <<EOF
# For compilers to find zlib you may need to set:
export LDFLAGS="${LDFLAGS} -L/usr/local/opt/zlib/lib"
export CPPFLAGS="${CPPFLAGS} -I/usr/local/opt/zlib/include"
# For pkg-config to find zlib you may need to set:
export PKG_CONFIG_PATH="${PKG_CONFIG_PATH} /usr/local/opt/zlib/lib/pkgconfig"
EOF
source ~/.zshrc
好奇 macOS_SDK_headers_for_macOS_10.14 这个是什么东西,上次装完这个,重启系统就挂了,格式化磁盘重装系统才行。。。
更通用的办法时 pyenv install 前按 brew info zlib 的提示设置下几个变量<br>$ brew info zlib | grep expor<br> export LDFLAGS="-L/usr/local/opt/zlib/lib"<br> export CPPFLAGS="-I/usr/local/opt/zlib/include"<br> export PKG_CONFIG_PATH="/usr/local/opt/zlib/lib/pkgconfig"<br>
好像我也是类似的操作

