TL; DR

执行 brew install zlib 安装 zlib 之后,根据安装信息提示将一下三行变量

export LDFLAGS="-L/opt/homebrew/opt/zlib/lib"
export CPPFLAGS="-I/opt/homebrew/opt/zlib/include"
export PKG_CONFIG_PATH="/opt/homebrew/opt/zlib/lib/pkgconfig"

加入到 ~/.zshrc 中,如果 shellbash 则加入 ~/.bashrc 中,以此类推,不确定当前默认的 shell 是哪一个,则执行 echo $0 查看输出结果。

source ~/.zshrc 或重新启动终端以后,再次执行安装指令即可。

分析

报错信息如下:

Traceback (most recent call last):
  File "<string>", line 1, in <module>
ImportError: No module named zlib
ERROR: The Python zlib extension was not compiled. Missing the zlib?

Please consult to the Wiki page to fix the problem.
https://github.com/pyenv/pyenv/wiki/Common-build-problems


BUILD FAILED (OS X 14.3.1 using python-build 20180424)

Inspect or clean up the working tree at /var/folders/rl/lhvcg2c15_g8ns9nsc6kx85c0000gn/T/python-build.20240312102055.43861
Results logged to /var/folders/rl/lhvcg2c15_g8ns9nsc6kx85c0000gn/T/python-build.20240312102055.43861.log

Last 10 log lines:
rm -f /Users/xxx/.pyenv/versions/2.7.18/share/man/man1/python.1
(cd /Users/xxx/.pyenv/versions/2.7.18/share/man/man1; ln -s python2.1 python.1)
if test "xno" != "xno"  ; then \
                case no in \
                        upgrade) ensurepip="--upgrade" ;; \
                        install|*) ensurepip="" ;; \
                esac; \
                DYLD_LIBRARY_PATH=/var/folders/rl/lhvcg2c15_g8ns9nsc6kx85c0000gn/T/python-build.20240312102055.43861/Python-2.7.18 ./python.exe -E -m ensurepip \
                        $ensurepip --root=/ ; \
        fi

根据 wiki提供的解决 zlib 包导致安装异常信息,主要诱因是编译目标 python 版本时,引用 zlib 的库函数异常了。同时官方也给出一个解决方案:

CPPFLAGS="-I$(brew --prefix zlib)/include" pyenv install -v 3.7.0

执行这一个命令后,我还是得到了同样的报错信息。于是回到这个命令本身,执行命令前覆写的环境变量 CPPFLAGS="-I$(brew --prefix zlib)/include",了解 CPP 的开发者应该知道,这里是提供了后续编译使用到的头文件的库目录,于是根据 wiki 上下文,主要是缺失 OpenSSL 段落中的信息,我看到了 CPPFLAGSLDFLAGS

再跑去 Google 了一圈,确实如这篇回答所说,现在装完 zlib 后会提示有三个变量可以进行选择性配置,装好需要配置一下路径,之后便能正常安装。

export LDFLAGS="-L/usr/local/opt/zlib/lib"
export CPPFLAGS="-I/usr/local/opt/zlib/include"
export PKG_CONFIG_PATH="/usr/local/opt/zlib/lib/pkgconfig"
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。