You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React Native Expo项目node-gyp与Python3.12兼容问题求助

React Native Expo node-gyp Python版本冲突解决方案

针对Apple Silicon macOS Sonoma(14)、Node.js v18、node-gyp 8环境下,Python3.10(node-gyp需求)与Python3.12(Android构建需求)的冲突问题,提供以下几种可行方案:

方案一:用pyenv管理多版本Python(推荐)

  • 安装pyenv:brew install pyenv
  • 安装Python3.10.x(替换x为最新小版本,如3.10.13):pyenv install 3.10.13
  • 在项目根目录创建.python-version文件,写入3.10.13,进入项目目录时自动切换到该版本
  • 执行npm install安装依赖,此时node-gyp会使用Python3.10,解决snappy、node-sass等包的编译报错
  • 进行Android构建时,可临时切换到Python3.12:
    • 全局切换:pyenv global 3.12.x(构建完成后再切回项目版本:pyenv local 3.10.13)
    • 或在构建命令前指定Python路径:PYTHON=/usr/bin/python3.12 ./gradlew assembleDebug

方案二:升级node-gyp到支持Python3.12的版本

node-gyp 9.0及以上版本已支持Python3.12,可通过以下方式升级:

  • 升级npm(npm内置node-gyp):npm install -g npm@latest
  • 或单独升级项目依赖的node-gyp:npm install node-gyp@latest --save-dev
  • 清理旧依赖后重新安装:rm -rf node_modules package-lock.json && npm install
  • 额外提示:node-sass已废弃,建议替换为sass(dart-sass),它是纯JS实现,无需node-gyp编译,直接修改package.json中的依赖后重新安装即可

方案三:强制使用预编译二进制包避免编译

针对snappy这类支持预编译的包,优先下载适配Apple Silicon的二进制包:

  • 安装prebuild-install:npm install prebuild-install --save-dev
  • 清理npm缓存:npm cache clean --force
  • 重新安装snappy时跳过编译:npm install snappy --build-from-source=false

方案四:临时指定node-gyp使用的Python版本

无需切换全局Python,安装依赖时临时指定Python3.10:

  • 单次安装:npm install --python=/path/to/python3.10(替换为你的Python3.10实际路径,可通过pyenv which python3.10获取)
  • 或临时设置npm配置:
    1. npm config set python /path/to/python3.10
    2. 执行npm install
    3. 安装完成后改回默认:npm config set python /path/to/python3.12

内容的提问来源于stack exchange,提问作者NicoleZ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 07:16:14