invalid mode: ‘rU‘ while trying to load binding.gyp 解决 node-gyp 与 python 版本不匹配报错
在执行 npm i 时报错 ValueError: invalid mode: 'rU' while trying to load binding.gyp
这个错误是因为 Python 3 不支持 rU 模式。rU 是 Python 2 的模式,表示以通用换行符读取文件。为了解决这个问题,可以通过升级 node-gyp 或降低 python 版本来解决。
# 升级 node-gyp
$ npm install -g node-gyp
但是非特殊情况,更推荐降低 Python 版本来解决,因为有的项目是老项目,它必须依赖低版本 python 来执行,这样出现的额外问题会比升级遇到的问题少。
node-gyp 需要 python2.5 < v < 3.0 的版本,所以如果本机是 python3 以上的版本,可以拷贝弄两个版本。附 Python 使用 pyenv 多版本管理。
安装好对应的 python 版本后,输出一下当前版本号,默认会使用当前设置的 python 版本,也可以指定版本。
处理好版本问题后,需要 清理和重建,删除 node_modules 目录和 package-lock.json 文件,然后重新安装依赖:
$ rm -rf node_modules package-lock.json
$ npm install
安装好项目依赖后,python 版本还是可以随意切换的,因为主要是在安装项目依赖的时候需要用到。
查看配置
$ npm config list
指定版本
# 指定目录,如果不指定,默认使用当前系统环境的得全局 python 版本
$ npm config set python /Users/xxx/.pyenv/versions/2.7.18/bin/python
删除配置
# 移除后就使用全局 python 版本
$ npm config delete python
作者:卡尔特斯