npm安装依赖报错 ` Can‘t find Python executable “python“, you can set the PYTHON env `

背景

在taro项目中使用npm安装依赖,package.json

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",
     ···
  }

环境信息

shell 复制代码
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 给出的建议是设置代理

shell 复制代码
···
> 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,很怪

shell 复制代码
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有关

shell 复制代码
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

shell 复制代码
brew install pyenv

使用pyenv安装python@2.7.18

shell 复制代码
pyenv global 2.7.18

设置全局的python版本为2.7.18

shell 复制代码
pyenv global 2.7.18

将包含Pyenv安装的Python解释器的路径设置添加到系统文件

shell 复制代码
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-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 安装的过程:

  1. npm 拉下 node-sass包;
  2. 根据node版本和node-sass版本拉取对应的binding.node编译器,原因是sass的编译语言比较特殊,需要下载对应版本的编译器才能编译;(node scripts/install.js 阶段)
  3. 如果能拉下binding.node就【安装成功】;
  4. 如果找不到对应的binding.node包,就会进入尝试【本地编译】,然后会检查是否具备的条件:需要python环境,报的错一般就会提示python没有安装

思考

对于框架遇到的问题,首先应该去官方文档看一下有没有对该问题的备注,可以帮助我们快速定位问题


其他

使用中国镜像服务器安装Homebrew

设置环境变量

为了使用中国的镜像服务器,你需要设置一个环境变量来告诉Homebrew从哪里获取数据。打开终端,并运行以下命令:

bash 复制代码
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上下载并执行安装脚本:

bash 复制代码
/bin/bash -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"

这个安装脚本将帮助你在Mac上安装Homebrew。

更新Homebrew

安装完成后,为了确保你的Homebrew是最新的,你应该运行以下命令来更新它:

bash 复制代码
brew update

如果你想要强制更新,可以使用以下命令:

bash 复制代码
brew update --force --quiet

如果在更新过程中遇到错误信息,比如 Failed to download https://formulae.brew.sh/api/formula_tap_migrations.jws.json,你可以尝试清除Homebrew的缓存:

bash 复制代码
brew cleanup

然后再次尝试更新。

注意事项

  • 在执行任何命令之前,建议你备份重要数据。
  • 如果你不确定某个命令的作用,请先进行查询或寻求专业人士的帮助。
  • 如果你遇到任何问题,可以考虑联系Homebrew的支持团队。

参考资料

相关推荐
Jiaberrr7 分钟前
Element UI教程:如何将Radio单选框的圆框改为方框
前端·javascript·vue.js·ui·elementui
Tiffany_Ho1 小时前
【TypeScript】知识点梳理(三)
前端·typescript
安冬的码畜日常2 小时前
【D3.js in Action 3 精译_029】3.5 给 D3 条形图加注图表标签(上)
开发语言·前端·javascript·信息可视化·数据可视化·d3.js
小白学习日记2 小时前
【复习】HTML常用标签<table>
前端·html
丁总学Java3 小时前
微信小程序-npm支持-如何使用npm包
前端·微信小程序·npm·node.js
yanlele3 小时前
前瞻 - 盘点 ES2025 已经定稿的语法规范
前端·javascript·代码规范
懒羊羊大王呀3 小时前
CSS——属性值计算
前端·css
DOKE4 小时前
VSCode终端:提升命令行使用体验
前端
xgq4 小时前
使用File System Access API 直接读写本地文件
前端·javascript·面试