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

参考资料

相关推荐
brien910 分钟前
为什么模型标称 1M,Google Antigravity 聊到 256K 却突然失忆?我们给它做了个原生行内监控圆环
前端
修炼的dance25 分钟前
录屏关键帧间隔多少合适?六档实测,2秒到10秒小了75.6%
前端
Lank_M31 分钟前
关键帧从1秒拉到10秒,录屏小87.3%,摄像头小10.8%
前端
补码缩写33 分钟前
用 ffprobe 拆录屏,八成字节在 29 个关键帧上
前端
百思不得小李35 分钟前
一个复杂的动态表单是如何实现的
前端·设计模式
陈随易1 小时前
Cmder 停更 17 个月,2.0 支持 Windows Terminal
前端·后端·程序员
风骏时光牛马1 小时前
前沿视界
前端
kyriewen1 小时前
我扫了 814 个依赖,97 个还敢要 Node 10
前端·javascript·程序员
陈随易1 小时前
3000 万人在用的翻译插件,重写一遍就是一门生意
前端·后端·程序员
IT_陈寒1 小时前
Vue的这个响应式陷阱,差点让我加班到天亮
前端·人工智能·后端