
node-gyp 8 不支持 python 3.12,需升级至 v10+ 并正确配置 python 路径,才能在 react native expo 项目中同时满足 native 模块编译与 android 构建对 python 版本的双重需求。
node-gyp 8 不支持 python 3.12,需升级至 v10+ 并正确配置 python 路径,才能在 react native expo 项目中同时满足 native 模块编译与 android 构建对 python 版本的双重需求。
node-gyp 是 Node.js 原生模块构建的核心工具,其版本与 Python 版本存在严格的兼容约束。根据官方文档和源码支持矩阵,Python 3.12 自 node-gyp v10.0.0(2023年9月发布)起才被正式支持;而你当前使用的 node-gyp v8(随 Node.js 18 默认安装)仅支持至 Python 3.10,因此在调用 prebuild-install || node-gyp rebuild(常见于 snappy、node-sass 等依赖)时会因 Python 解析失败或 ABI 不匹配而崩溃。
✅ 正确解决方案分三步执行(macOS Sonoma + Apple Silicon 适配):
-
升级 node-gyp 到 v10+
全局安装最新稳定版(推荐 v10.1.0+):npm install -g node-gyp@latest # 验证版本 node-gyp --version # 应输出 >= 10.0.0
-
显式指定 Python 3.12 路径(避免自动探测失败)
macOS 上若通过 pyenv 或 brew 安装 Python 3.12,先确认路径:which python3.12 # 例如:/opt/homebrew/bin/python3.12
然后配置 node-gyp 使用该解释器:
node-gyp configure --python /opt/homebrew/bin/python3.12 # 或设为全局默认(推荐) npm config set python /opt/homebrew/bin/python3.12
-
清理缓存并重试安装
避免旧构建残留干扰:rm -rf node_modules package-lock.json npm cache clean --force npm install
⚠️ 注意事项:
- Expo 开发环境(尤其是 EAS Build)通常不直接运行 node-gyp,但本地 iOS 模拟器调试或自定义原生模块(如 react-native-snappy)仍会触发;若使用 EAS,应确保 eas-build 的 buildProfile 中 nodeVersion 与 pythonVersion 显式声明(EAS 支持 python: "3.12")。
- node-sass 已废弃,强烈建议迁移到 sass(纯 Dart 实现,零 native 依赖);snappy 可考虑 snappy-stream 或 node-snappy 的现代替代方案。
- 若项目仍需兼容旧版 node-gyp(如 CI 环境受限),可临时使用 PYENV_VERSION=3.10 npm install 切换 Python 版本,但非长期推荐。
总结:根本解法是 升级 node-gyp 至 v10+ 并精准绑定 Python 3.12,而非降级 Python——这既满足 Android 构建对新 Python 特性的依赖,也保障了原生模块的顺利编译,实现开发环境的一致性与可持续性。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











