macOS 下使用 pyenv 编译并使用 Python 3.7 或更新版本

因为不同的项目可能用不同的 Python 版本,于是我用 pyenv 来进行 Python 的多版本管理,而不是用系统自带的 Python 或 homebrew 的 Python。

然而在用 pyenv 编译对应的 Python 版本时,可能会遇到如下错误:

zipimport.ZipImportError: can't decompress data; zlib not available

或者

WARNING: The Python sqlite3 extension was not compiled. Missing the SQLite3 lib?

这时你需要检查一下 zlib 或 sqlite3 是不是已经安装,但即使已经通过 homebrew 安装了以上 Package,依然会出现这些错误。这是因为 pyenv 无法找到 homebrew 安装的库的路径,需要手动指定:

export LDFLAGS="-L/usr/local/opt/zlib/lib -L/usr/local/opt/sqlite/lib"

export CPPFLAGS="-I/usr/local/opt/zlib/include -I/usr/local/opt/sqlite/include"

这样,zlib 的问题和 Sqlite3 的问题都会解决了。

你也可能会遇到其他问题:比如 OpenSSL,解决方式是类似的,可以看:https://github.com/pyenv/pyenv/wiki/common-build-problems

欢迎使用图拉鼎和他的团队开发的作品

效率控 - 聚合众多实用小工具

装机必备的高颜值工具箱,拥有超过 18 款工具,完成日常各类任务。支持 iPhone、iPad 和 macOS。

3 Comments

Moz

为什么不用 conda 呢?

tualatrix

因为目前为止 pyenv 都用的好好的,所以暂时没动力去用新的 conda。有时间去了解一下。

Evan

感谢博主的分享!针对这个问题,官方的方法可能更好些。

Common build problems · pyenv/pyenv Wiki · GitHub
https://github.com/pyenv/pyenv/wiki/common-build-problems

When running Mojave or higher (10.14+) you will also need to install the additional SDK headers by downloading them from Apple Developers.

Leave a Comment