npm安装依赖报错 ` Can‘t find Python executable “python“, you can set the PYTHON env variable`
背景
在taro项目中使用npm安装依赖,package.json
"dependencies": {
···
"@tarojs/cli": "3.0.27",
"@tarojs/components": "3.0.27",
"@tarojs/extend": "^3.0.28",
"@tarojs/react": "3.0.27",
"@tarojs/runtime": "3.0.27",
"@tarojs/taro": "3.0.27",
"react": "^16.10.0",
"react-dom": "^16.10.0",
"taro-i18n": "^1.0.3",
"taro-ui": "^3.0.0-alpha.3"
···
},
Ï"devDependencies": {
···
"@babel/core": "^7.8.0",
"@tarojs/mini-runner": "3.0.27",
"@tarojs/webpack-runner": "3.0.27",
···
}
环境信息
tiands@tiandsdeMacBook-Pro demo-doc % node -v
v14.18.1
tiands@tiandsdeMacBook-Pro demo-doc % npm -v
6.14.15
硬件信息
- 型号名称:MacBook Pro
- 版本: 12.6.9
- 芯片: Apple M1
问题描述
项目根目录下运行npm i
,报错信息如下,运行记录里面共出现三处err,具体信息见下文
报错信息
片段1
观察此片段,可以看出是在安装node-sass
的时候,有个文件404没找到
npm 给出的建议是设置代理
···
> node-sass@4.14.1 install /Users/tds/Desktop/tds/taro-h5/node_modules/node-sass
> node scripts/install.js
Downloading binary from http://github.com/mirrors/node-sass/v4.14.1/darwin-arm64-83_binding.node
Cannot download "http://github.com/mirrors/node-sass/v4.14.1/darwin-arm64-83_binding.node":
HTTP error 404 Not Found
Hint: If github.com is not accessible in your location
try setting a proxy via HTTP_PROXY, e.g.
export HTTP_PROXY=http://example.com:1234
or configure npm proxy via
npm config set proxy http://example.com:8080
> pre-commit@1.2.2 install /Users/tds/Desktop/tds/taro-h5/node_modules/pre-commit
> node install.js
pre-commit:
pre-commit: Detected an existing git pre-commit hook
pre-commit: Old pre-commit hook backuped to pre-commit.old
pre-commit:
> core-js@3.36.1 postinstall /Users/tds/Desktop/tds/taro-h5/node_modules/babel-preset-taro/node_modules/core-js
> node -e "try{require('./postinstall')}catch(e){}"
···
片段2
没有python
,很怪
gyp ERR! configure error
gyp ERR! stack Error: Can't find Python executable "python", you can set the PYTHON env variable.
gyp ERR! stack at PythonFinder.failNoPython (/Users/tds/Desktop/dm/taro-h5/node_modules/node-gyp/lib/configure.js:484:19)
gyp ERR! stack at PythonFinder.<anonymous> (/Users/tds/Desktop/dm/taro-h5/node_modules/node-gyp/lib/configure.js:406:16)
gyp ERR! stack at F (/Users/tds/Desktop/dm/taro-h5/node_modules/node-gyp/node_modules/which/which.js:68:16)
gyp ERR! stack at E (/Users/tds/Desktop/dm/taro-h5/node_modules/node-gyp/node_modules/which/which.js:80:29)
gyp ERR! stack at /Users/tds/Desktop/dm/taro-h5/node_modules/node-gyp/node_modules/which/which.js:89:16
gyp ERR! stack at /Users/tds/Desktop/dm/taro-h5/node_modules/isexe/index.js:42:5
gyp ERR! stack at /Users/tds/Desktop/dm/taro-h5/node_modules/isexe/mode.js:8:5
gyp ERR! stack at FSReqCallback.oncomplete (fs.js:191:21)
gyp ERR! System Darwin 21.6.0
gyp ERR! command "/Users/tds/.nvm/versions/node/v14.18.1/bin/node" "/Users/tds/Desktop/dm/taro-h5/node_modules/node-gyp/bin/node-gyp.js" "rebuild" "--verbose" "--libsass_ext=" "--libsass_cflags=" "--libsass_ldflags=" "--libsass_library="
gyp ERR! cwd /Users/tds/Desktop/dm/taro-h5/node_modules/node-sass
gyp ERR! node -v v14.18.1
gyp ERR! node-gyp -v v3.8.0
gyp ERR! not ok
片段3
没有什么特别有价值的,大概就是安装node-sass
的时候报错了,和node scripts/build.js
有关
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! node-sass@4.14.1 postinstall: `node scripts/build.js`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the node-sass@4.14.1 postinstall script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! /Users/tds/.npm/_logs/2024-04-11T03_30_18_062Z-debug.log
tds@tdss-MacBook-Pro taro-h5 %
解决方案
方案一
使用brew
安装pyenv
brew install pyenv
使用pyenv
安装python@2.7.18
pyenv global 2.7.18
设置全局的python
版本为2.7.18
pyenv global 2.7.18
将包含Pyenv安装的Python解释器的路径设置添加到系统文件
echo 'PATH=$(pyenv root)/shims:$PATH' >> ~/.zshrc
pyenv是一个允许你在同一台机器上安装和管理多个Python版本的工具。你可以使用pyenv来安装Python 2.7。首先,你需要安装pyenv,然后使用它来安装Python 2.7。这是一个比较流行的方法,因为它允许你轻松地在不同版本的Python之间切换。
方案二
切换安装远程地址为淘宝镜像(npm config set registry https://registry.npmmirror.com/
), 然后重新安装依赖
由于 Taro 的 @tarojs/webpack-runner 包默认依赖了 node-sass,倒是有些时候依赖一直安装不了,在此,建议直接使用淘宝的 cnpm 进行安装依赖,
方案三
检查node和node-sass的版本对应关系,确认是否匹配
方案四
使用更高版本的node
解决流程
根据收集到的错误信息提取关键字npm 安装node-sass报错
,使用搜索引擎进行搜索
查看node和node-sass的版本对应关系,无异常
切换安装远程地址为淘宝镜像(npm config set registry https://registry.npmmirror.com/
), 然后重新安装依赖,报错依旧
切换关键字node-sass/v4.14.1/darwin-arm64-83_binding.node 404
,使用搜索引擎进行搜索
大概看了一下对应的原文,意思是说m1芯片的mac电脑使用ARM架构,低版本的node-sass
没有对应的binding.node编译器
如果在不改变node版本的情况下,我只能安装python来实现node-sass
的本地编译了
原因分析
node-sass 安装过程分析
首先了解一下 node-sass 安装的过程:
- npm 拉下 node-sass包;
- 根据node版本和node-sass版本拉取对应的binding.node编译器,原因是sass的编译语言比较特殊,需要下载对应版本的编译器才能编译;(node scripts/install.js 阶段)
- 如果能拉下binding.node就【安装成功】;
- 如果找不到对应的binding.node包,就会进入尝试【本地编译】,然后会检查是否具备的条件:需要python环境,报的错一般就会提示python没有安装
思考
对于框架遇到的问题,首先应该去官方文档看一下有没有对该问题的备注,可以帮助我们快速定位问题
其他
使用中国镜像服务器安装Homebrew
设置环境变量
为了使用中国的镜像服务器,你需要设置一个环境变量来告诉Homebrew从哪里获取数据。打开终端,并运行以下命令:
echo 'export HOMEBREW_API_DOMAIN="https://mirrors.ustc.edu.cn/homebrew-bottles/api"' >> ~/.zshrc
source ~/.zshrc
注意:这里的URL https://mirrors.ustc.edu.cn/homebrew-bottles/api
是中国科学技术大学(USTC)的镜像服务器地址。你可以根据自己的需求选择其他的镜像服务器。
安装Homebrew
如果你尚未安装Homebrew,可以使用以下命令从Gitee上下载并执行安装脚本:
/bin/bash -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"
这个安装脚本将帮助你在Mac上安装Homebrew。
更新Homebrew
安装完成后,为了确保你的Homebrew是最新的,你应该运行以下命令来更新它:
brew update
如果你想要强制更新,可以使用以下命令:
brew update --force --quiet
如果在更新过程中遇到错误信息,比如 Failed to download https://formulae.brew.sh/api/formula_tap_migrations.jws.json
,你可以尝试清除Homebrew的缓存:
brew cleanup
然后再次尝试更新。
注意事项
- 在执行任何命令之前,建议你备份重要数据。
- 如果你不确定某个命令的作用,请先进行查询或寻求专业人士的帮助。
- 如果你遇到任何问题,可以考虑联系Homebrew的支持团队。
参考资料
更多推荐
所有评论(0)