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的支持团队。

参考资料

相关推荐
江号软件分享31 分钟前
有效保障隐私,如何安全地擦除电脑上的敏感数据
前端
web守墓人2 小时前
【前端】ikun-markdown: 纯js实现markdown到富文本html的转换库
前端·javascript·html
Savior`L2 小时前
CSS知识复习5
前端·css
许白掰2 小时前
Linux入门篇学习——Linux 工具之 make 工具和 makefile 文件
linux·运维·服务器·前端·学习·编辑器
中微子6 小时前
🔥 React Context 面试必考!从源码到实战的完整攻略 | 99%的人都不知道的性能陷阱
前端·react.js
中微子7 小时前
React 状态管理 源码深度解析
前端·react.js
加减法原则8 小时前
Vue3 组合式函数:让你的代码复用如丝般顺滑
前端·vue.js
yanlele9 小时前
我用爬虫抓取了 25 年 6 月掘金热门面试文章
前端·javascript·面试
lichenyang4539 小时前
React移动端开发项目优化
前端·react.js·前端框架
你的人类朋友9 小时前
🍃Kubernetes(k8s)核心概念一览
前端·后端·自动化运维