Python 3.12升级后Homebrew安装OpenJDK失败求助
解决Homebrew安装OpenJDK时因Python 3.12缺失distutils导致的glib编译失败问题
尝试通过Homebrew安装OpenJDK(多个版本均出现相同问题)时,依赖的glib包编译失败,核心错误为:ModuleNotFoundError: No module named 'distutils'
完整错误日志:
==> Installing openjdk@17 dependency: glib ==> Patching ==> Applying hardcoded-paths.diff patching file 'gio/xdgmime/xdgmime.c' patching file 'glib/gutils.c' ==> meson setup build --default-library=both --localstatedir=/Users/aaronblythe/homebrew/var -Dgio_module_dir=/Users/aaronblythe/homebrew/lib/gio/modules -Dbsymbolic_functions=false -Ddtrace=false -Druntime_dir=/Users/aaronblythe/homebrew/var ==> meson compile -C build --verbose Last 15 lines from /Users/aaronblythe/Library/Logs/Homebrew/glib/02.meson: ModuleNotFoundError: No module named 'distutils' [5/1358] /private/tmp/glib-20231023-14634-16y3dzi/glib-2.78.0/tools/gen-visibility-macros.py 2.78.0 versions-macros ../glib/gversionmacros.h.in glib/gversionmacros.h [6/1358] /private/tmp/glib-20231023-14634-16y3dzi/glib-2.78.0/tools/gen-visibility-macros.py 2.78.0 visibility-macros GLIB glib/glib-visibility.h [7/1358] /private/tmp/glib-20231023-14634-16y3dzi/glib-2.78.0/tools/gen-visibility-macros.py 2.78.0 visibility-macros GOBJECT gobject/gobject-visibility.h [8/1358] /Users/aaronblythe/homebrew/opt/meson/bin/meson --internal exe --capture gobject/glib-enumtypes.h -- /Users/aaronblythe/homebrew/opt/python@3.12/bin/python3.12 gobject/glib-mkenums --template ../gobject/glib-enumtypes.h.template ../gobject/../glib/gunicode.h [9/1358] /private/tmp/glib-20231023-14634-16y3dzi/glib-2.78.0/tools/gen-visibility-macros.py 2.78.0 visibility-macros GMODULE gmodule/gmodule-visibility.h [10/1358] clang -Iglib/tests/getpwuid-preload.dylib.p -Iglib/tests -I../glib/tests -fcolor-diagnostics -Wall -Winvalid-pch -Wextra -Wpedantic -std=gnu99 -O3 -D_GNU_SOURCE -fno-strict-aliasing -DG_DISABLE_CAST_CHECKS -Wimplicit-fallthrough -Wmisleading-indentation -Wmissing-field-initializers -Wnonnull -Wunused -Wno-unused-parameter -Wno-cast-function-type -Wno-pedantic -Wno-format-zero-length -Wno-variadic-macros -Werror=format=2 -Werror=init-self -Werror=missing-include-dirs -Werror=pointer-arith -Werror=unused-result -Wstrict-prototypes -Wno-bad-function-cast -Werror=implicit-function-declaration -Werror=missing-prototypes -Werror=pointer-sign -Wno-string-plus-int -MD -MQ glib/tests/getpwuid-preload.dylib.p/getpwuid-preload.c.o -MF glib/tests/getpwuid-preload.dylib.p/getpwuid-preload.c.o.d -o glib/tests/getpwuid-preload.dylib.p/getpwuid-preload.c.o -c ../glib/tests/getpwuid-preload.c [11/1358] clang -Iglib/libcharset/libcharset.a.p -Iglib/libcharset -I../glib/libcharset -I. -I.. -fvisibility=hidden -fcolor-diagnostics -Wall -Winvalid-pch -Wextra -Wpedantic -std=gnu99 -O3 -D_GNU_SOURCE -fno-strict-aliasing -DG_DISABLE_CAST_CHECKS -Wimplicit-fallthrough -Wmisleading-indentation -Wmissing-field-initializers -Wnonnull -Wunused -Wno-unused-parameter -Wno-cast-function-type -Wno-pedantic -Wno-format-zero-length -Wno-variadic-macros -Werror=format=2 -Werror=init-self -Werror=missing-include-dirs -Werror=pointer-arith -Werror=unused-result -Wstrict-prototypes -Wno-bad-function-cast -Werror=implicit-function-declaration -Werror=missing-prototypes -Werror=pointer-sign -Wno-string-plus-int '-DGLIB_CHARSETALIAS_DIR="/Users/aaronblythe/homebrew/Cellar/glib/2.78.0/lib"' -MD -MQ glib/libcharset/libcharset.a.p/localcharset.c.o -MF glib/libcharset/libcharset.a.p/localcharset.c.o.d -o glib/libcharset/libcharset.a.p/localcharset.c.o -c ../glib/libcharset/localcharset.c [12/1358] clang -Igio/xdgmime/libxdgmime.a.p -Igio/xdgmime -I../gio/xdgmime -I. -I.. -fvisibility=hidden -fcolor-diagnostics -Wall -Winvalid-pch -Wextra -Wpedantic -std=gnu99 -O3 -D_GNU_SOURCE -fno-strict-aliasing -DG_DISABLE_CAST_CHECKS -Wimplicit-fallthrough -Wmisleading-indentation -Wmissing-field-initializers -Wnonnull -Wunused -Wno-unused-parameter -Wno-cast-function-type -Wno-pedantic -Wno-format-zero-length -Wno-variadic-macros -Werror=format=2 -Werror=init-self -Werror=missing-include-dirs -Werror=pointer-arith -Werror=unused-result -Wstrict-prototypes -Wno-bad-function-cast -Werror=implicit-function-declaration -Werror=missing-prototypes -Werror=pointer-sign -Wno-string-plus-int -DHAVE_CONFIG_H -DXDG_PREFIX=_gio_xdg -MD -MQ gio/xdgmime/libxdgmime.a.p/xdgmimealias.c.o -MF gio/xdgmime/libxdgmime.a.p/xdgmimealias.c.o.d -o gio/xdgmime/libxdgmime.a.p/xdgmimealias.c.o -c ../gio/xdgmime/xdgmimealias.c [13/1358] clang -Igio/xdgmime/libxdgmime.a.p -Igio/xdgmime -I../gio/xdgmime -I. -I.. -fvisibility=hidden -fcolor-diagnostics -Wall -Winvalid-pch -Wextra -Wpedantic -std=gnu99 -O3 -D_GNU_SOURCE -fno-strict-aliasing -DG_DISABLE_CAST_CHECKS -Wimplicit-fallthrough -Wmisleading-indentation -Wmissing-field-initializers -Wnonnull -Wunused -Wno-unused-parameter -Wno-cast-function-type -Wno-pedantic -Wno-format-zero-length -Wno-variadic-macros -Werror=format=2 -Werror=init-self -Werror=missing-include-dirs -Werror=pointer-arith -Werror=unused-result -Wstrict-prototypes -Wno-bad-function-cast -Werror=implicit-function-declaration -Werror=missing-prototypes -Werror=pointer-sign -Wno-string-plus-int -DHAVE_CONFIG_H -DXDG_PREFIX=_gio_xdg -MD -MQ gio/xdgmime/libxdgmime.a.p/xdgmimeglob.c.o -MF gio/xdgmime/libxdgmime.a.p/xdgmimeglob.c.o.d -o gio/xdgmime/libxdgmime.a.p/xdgmimeglob.c.o -c ../gio/xdgmime/xdgmimeglob.c [14/1358] clang -Igio/xdgmime/libxdgmime.a.p -Igio/xdgmime -I../gio/xdgmime -I. -I.. -fvisibility=hidden -fcolor-diagnostics -Wall -Winvalid-pch -Wextra -Wpedantic -std=gnu99 -O3 -D_GNU_SOURCE -fno-strict-aliasing -DG_DISABLE_CAST_CHECKS -Wimplicit-fallthrough -Wmisleading-indentation -Wmissing-field-initializers -Wnonnull -Wunused -Wno-unused-parameter -Wno-cast-function-type -Wno-pedantic -Wno-format-zero-length -Wno-variadic-macros -Werror=format=2 -Werror=init-self -Werror=missing-include-dirs -Werror=pointer-arith -Werror=unused-result -Wstrict-prototypes -Wno-bad-function-cast -Werror=implicit-function-declaration -Werror=missing-prototypes -Werror=pointer-sign -Wno-string-plus-int -DHAVE_CONFIG_H -DXDG_PREFIX=_gio_xdg -MD -MQ gio/xdgmime/libxdgmime.a.p/xdgmime.c.o -MF gio/xdgmime/libxdgmime.a.p/xdgmime.c.o.d -o gio/xdgmime/libxdgmime.a.p/xdgmime.c.o -c ../gio/xdgmime/xdgmime.c [15/1358] clang -Igio/xdgmime/libxdgmime.a.p -Igio/xdgmime -I../gio/xdgmime -I. -I.. -fvisibility=hidden -fcolor-diagnostics -Wall -Winvalid-pch -Wextra -Wpedantic -std=gnu99 -O3 -D_GNU_SOURCE -fno-strict-aliasing -DG_DISABLE_CAST_CHECKS -Wimplicit-fallthrough -Wmisleading-indentation -Wmissing-field-initializers -Wnonnull -Wunused -Wno-unused-parameter -Wno-cast-function-type -Wno-pedantic -Wno-format-zero-length -Wno-variadic-macros -Werror=format=2 -Werror=init-self -Werror=missing-include-dirs -Werror=pointer-arith -Werror=unused-result -Wstrict-prototypes -Wno-bad-function-cast -Werror=implicit-function-declaration -Werror=missing-prototypes -Werror=pointer-sign -Wno-string-plus-int -DHAVE_CONFIG_H -DXDG_PREFIX=_gio_xdg -MD -MQ gio/xdgmime/libxdgmime.a.p/xdgmimecache.c.o -MF gio/xdgmime/libxdgmime.a.p/xdgmimecache.c.o.d -o gio/xdgmime/libxdgmime.a.p/xdgmimecache.c.o -c ../gio/xdgmime/xdgmimecache.c ninja: build stopped: subcommand failed. INFO: autodetecting backend as ninja INFO: calculating backend command to run: /Users/aaronblythe/homebrew/Library/Homebrew/shims/mac/super/ninja -C /private/tmp/glib-20231023-14634-16y3dzi/glib-2.78.0/build -v Do not report this issue to Homebrew/brew or Homebrew/homebrew-core!
问题原因
Python 3.12已正式移除distutils模块,而Homebrew构建glib的脚本尚未适配该变更,仍依赖distutils完成编译流程,导致安装中断。
解决方案
方案1:安装setuptools(包含distutils兼容包)
distutils目前作为setuptools的子模块维护,执行以下命令安装即可补全依赖:
brew install setuptools
安装完成后,重新执行OpenJDK安装命令:
brew install openjdk@17
方案2:临时切换到Python 3.11版本
如果不想安装setuptools,可以让Homebrew使用仍包含distutils的Python 3.11进行构建:
# 安装Python 3.11 brew install python@3.11 # 临时将Python 3.11设为当前终端默认 export PATH="$(brew --prefix python@3.11)/bin:$PATH" # 安装目标OpenJDK版本 brew install openjdk@17
方案3:强制使用预编译的glib包
跳过本地编译,直接安装Homebrew提供的预编译glib包:
brew reinstall --force-bottle glib
完成后再尝试安装OpenJDK。
内容的提问来源于stack exchange,提问作者aaron blythe
相关产品推荐
相关产品推荐

