Mac M1(OS X 12.4)下pyenv安装Python3.8.6失败求助
问题描述
我遇到了很多用户都碰到过的错误,不管试什么方法,安装Python3.8.6时都会反复出现相同报错,恳请各位帮忙。执行pyenv install 3.8.6的详细报错日志如下:
pyenv install 3.8.6 ✔ 9423 15:42:52 python-build: 使用Homebrew的openssl@1.1 python-build: 使用Homebrew的readline 正在下载Python-3.8.6.tar.xz... -> https://www.python.org/ftp/python/3.8.6/Python-3.8.6.tar.xz 正在安装Python-3.8.6... 正在修补文件 Misc/NEWS.d/next/Build/2021-10-11-16-27-38.bpo-45405.iSfdW5.rst 正在修补文件 configure 正在修补文件 configure.ac python-build: 使用Homebrew的readline python-build: 使用Xcode SDK的zlib 构建失败(OS X 12.4,使用python-build 20180424) 可查看或清理工作目录:/var/folders/n9/9hllxbjs5dg0byfs43j5fbdm0000gn/T/python-build.20230217154339.44173 结果已记录到:/var/folders/n9/9hllxbjs5dg0byfs43j5fbdm0000gn/T/python-build.20230217154339.44173.log 最后10行日志: DYLD_LIBRARY_PATH=/var/folders/n9/9hllxbjs5dg0byfs43j5fbdm0000gn/T/python-build.20230217154339.44173/Python-3.8.6 ./python.exe -E -S -m sysconfig --generate-posix-vars ;\ if test $? -ne 0 ; then \ echo "生成posix变量失败" ; \ rm -f ./pybuilddir.txt ; \ exit 1 ; \ fi dyld[55035]: 在扁平命名空间中找不到符号 '_libintl_bindtextdomain' /bin/sh: 第1行: 55035 中止陷阱: 6 DYLD_LIBRARY_PATH=/var/folders/n9/9hllxbjs5dg0byfs43j5fbdm0000gn/T/python-build.20230217154339.44173/Python-3.8.6 ./python.exe -E -S -m sysconfig --generate-posix-vars 生成posix变量失败 make: *** [pybuilddir.txt] 错误 1
解决方法
这个报错是因为编译时找不到gettext库的核心符号,在macOS 12+版本安装Python3.8.x这类旧版本时普遍存在,以下是几种靠谱的解决办法:
1. 指定gettext路径编译
先通过Homebrew安装gettext:
brew install gettext
然后用环境变量指定路径执行安装:
LDFLAGS="-L$(brew --prefix gettext)/lib" CPPFLAGS="-I$(brew --prefix gettext)/include" pyenv install 3.8.6
2. 更新pyenv及python-build
你的python-build版本是20180424,过于老旧,更新后能修复很多兼容性问题:
pyenv update
更新完成后重新执行安装命令:
pyenv install 3.8.6
3. 临时覆盖系统环境变量
如果前两种方法无效,尝试临时把Homebrew的gettext优先级设为最高:
export PATH="$(brew --prefix gettext)/bin:$PATH" export LDFLAGS="-L$(brew --prefix gettext)/lib" export CPPFLAGS="-I$(brew --prefix gettext)/include" export PKG_CONFIG_PATH="$(brew --prefix gettext)/lib/pkgconfig" pyenv install 3.8.6
内容的提问来源于stack exchange,提问作者M-WRI
相关产品推荐
相关产品推荐

