Node.js: Python 未发现由于 node-sass 和 node-gyp 导致的异常

Node.js: Python not found exception due to node-sass and node-gyp

突然在我的一个 jenkins 环境中构建开始失败,而在本地机器上它似乎工作正常,因为我安装了 python,

从日志中我能够检测到问题出在 node-gyp v3.5.0 来自 node-[=37= 的内部依赖项] v3.8.0 当我通过访问 this 研究 node-gyp 并发现需要安装 Python 的先决条件时。

所以我的问题是,我可以安装哪个版本的 node-sass 来绕过这个问题,或者是否有更好的解决方案,因为我的构建 运行 直到今天早上在相同的环境中都很好。

节点 v5.10.1

错误日志

gyp verb check python checking for Python executable "python2" in the PATH
gyp verb `which` failed Error: not found: python2
gyp verb `which` failed     at getNotFoundError (C:\Program Files (x86)\Jenkins\jobs\NdbSite-hot-fix-Manual-PreBuild\workspace\src\NdbSite.UI\node_modules\which\which.js:13:12)
gyp verb `which` failed     at F (C:\Program Files (x86)\Jenkins\jobs\NdbSite-hot-fix-Manual-PreBuild\workspace\src\NdbSite.UI\node_modules\which\which.js:68:19)
gyp verb `which` failed     at E (C:\Program Files (x86)\Jenkins\jobs\NdbSite-hot-fix-Manual-PreBuild\workspace\src\NdbSite.UI\node_modules\which\which.js:80:29)
gyp verb `which` failed     at C:\Program Files (x86)\Jenkins\jobs\NdbSite-hot-fix-Manual-PreBuild\workspace\src\NdbSite.UI\node_modules\which\which.js:89:16
gyp verb `which` failed     at C:\Program Files (x86)\Jenkins\jobs\NdbSite-hot-fix-Manual-PreBuild\workspace\src\NdbSite.UI\node_modules\isexe\index.js:44:5
gyp verb `which` failed     at C:\Program Files (x86)\Jenkins\jobs\NdbSite-hot-fix-Manual-PreBuild\workspace\src\NdbSite.UI\node_modules\isexe\windows.js:29:5
gyp verb `which` failed     at FSReqWrap.oncomplete (fs.js:82:15)
gyp verb `which` failed  python2 { [Error: not found: python2] code: 'ENOENT' }
gyp verb check python checking for Python executable "python" in the PATH
gyp verb `which` failed Error: not found: python
gyp verb `which` failed     at getNotFoundError (C:\Program Files (x86)\Jenkins\jobs\NdbSite-hot-fix-Manual-PreBuild\workspace\src\NdbSite.UI\node_modules\which\which.js:13:12)
gyp verb `which` failed     at F (C:\Program Files (x86)\Jenkins\jobs\NdbSite-hot-fix-Manual-PreBuild\workspace\src\NdbSite.UI\node_modules\which\which.js:68:19)
gyp verb `which` failed     at E (C:\Program Files (x86)\Jenkins\jobs\NdbSite-hot-fix-Manual-PreBuild\workspace\src\NdbSite.UI\node_modules\which\which.js:80:29)
gyp verb `which` failed     at C:\Program Files (x86)\Jenkins\jobs\NdbSite-hot-fix-Manual-PreBuild\workspace\src\NdbSite.UI\node_modules\which\which.js:89:16
gyp verb `which` failed     at C:\Program Files (x86)\Jenkins\jobs\NdbSite-hot-fix-Manual-PreBuild\workspace\src\NdbSite.UI\node_modules\isexe\index.js:44:5
gyp verb `which` failed     at C:\Program Files (x86)\Jenkins\jobs\NdbSite-hot-fix-Manual-PreBuild\workspace\src\NdbSite.UI\node_modules\isexe\windows.js:29:5
gyp verb `which` failed     at FSReqWrap.oncomplete (fs.js:82:15)
gyp verb `which` failed  python { [Error: not found: python] code: 'ENOENT' }
gyp verb could not find "python". checking python launcher 
gyp verb could not find "python". guessing location 
gyp verb ensuring that file exists: C:\Python27\python.exe
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 Object.failNoPython (C:\Program Files (x86)\Jenkins\jobs\NdbSite-hot-fix-Manual-PreBuild\workspace\src\NdbSite.UI\node_modules\node-gyp\lib\configure.js:454:19)
gyp ERR! stack     at Object.<anonymous> (C:\Program Files (x86)\Jenkins\jobs\NdbSite-hot-fix-Manual-PreBuild\workspace\src\NdbSite.UI\node_modules\node-gyp\lib\configure.js:480:16)
gyp ERR! stack     at C:\Program Files (x86)\Jenkins\jobs\NdbSite-hot-fix-Manual-PreBuild\workspace\src\NdbSite.UI\node_modules\graceful-fs\polyfills.js:284:29
gyp ERR! stack     at FSReqWrap.oncomplete (fs.js:82:15)
gyp ERR! System Windows_NT 6.3.9600
gyp ERR! command "C:\Program Files\nodejs\node.exe" "C:\Program Files (x86)\Jenkins\jobs\NdbSite-hot-fix-Manual-PreBuild\workspace\src\NdbSite.UI\node_modules\node-gyp\bin\node-gyp.js" "rebuild" "--verbose" "--libsass_ext=" "--libsass_cflags=" "--libsass_ldflags=" "--libsass_library="
gyp ERR! cwd C:\Program Files (x86)\Jenkins\jobs\NdbSite-hot-fix-Manual-PreBuild\workspace\src\NdbSite.UI\node_modules\node-sass
gyp ERR! node -v v5.10.1
gyp ERR! node-gyp -v v3.5.0
gyp ERR! not ok 
Build failed

非常感谢任何想法,谢谢。

Node-sass 尝试在安装时为您的平台下载二进制文件。 3.8 支持节点 5 https://github.com/sass/node-sass/releases/tag/v3.8.0 如果您的 Jenkins 无法下载预构建的二进制文件,那么您需要遵循 Node-gyp README 上的平台要求(Python2、VS 或 MSBuild,...) 如果可能的话,我建议将您的 Node 更新到至少 6,因为 Node 不再支持 5。 如果你想升级到 8,你需要更新 node-sass 到 4.5.3

在我的 PC 上尝试安装不同版本的 python 时遇到同样的问题。只需将 node 升级到最新版本 v8.11.2 和 npm 5.6.0,然后在安装 node-sass@4.5.3 之后就可以了。

最近 windows 这件事发生在我身上。我使用具有管理员权限的 PowerShell 按照以下步骤修复它:

  1. 删除node_modules文件夹
  2. 运行 npm install --global windows-build-tools 具有管理权限。 (在我的情况下需要重新启动 - 并且无需询问即可重新启动!!!)
  3. 正在使用 npm install
  4. 重新安装节点模块或节点-sass

我必须:

Delete node_modules
Uninstall/reinstall node
npm install node-sass@4.12.0

在强制使用正确的 sass 版本后工作正常,根据据说与正确节点一起工作的版本。

NodeJS  Minimum node-sass version   Node Module
Node 12 4.12+   72
Node 11 4.10+   67
Node 10 4.9+    64
Node 8  4.5.3+  57

还有许多其他错误似乎是由错误的 sass 版本定义引起的。

查看所有答案后,我发现此解决方案可能非常有用。它在安装 node-sass 时解释 how to configure "npm" to find your installed python version。请记住,node-sass 需要 node-gyp(npm build-tool)来查找您的 python 路径。或者只安装 python,然后按照给出的相同解决方案(在 link 中)。谢谢

这是 2 岁,但是 none 帮助了我。

我卸载了我的 NodeJS v12.8.1(当前)并安装了一个全新的 v10.16.3(LTS)并且我的 ng build --prod 成功了。

我的机器是 Windows 10,我在尝试编译时遇到了类似的问题 SASS使用 node-sass 包。我的节点版本是 v10.16.3 和 npm 版本是 6.9.0

我解决问题的方式:

  1. 首先删除package-lock.json个文件和node_modules/个文件夹。
  2. 以管理员身份打开 Windows PowerShell。
  3. 运行命令npm i -g node-sass.
  4. 之后,转到项目文件夹和运行 npm install
  5. 最后,运行 SASS 编译脚本,在我的例子中,它是 npm run build:css

而且有效!!

我的回答可能并不适用于所有人。 节点版本:v10.16.0 NPM:6.9.0

我在使用 node-sass and node-sass-middleware 时遇到了很多麻烦。它们是有趣的包,因为它们被广泛使用(每周有数百万次下载),但它们的 githubs 显示有限的依赖性和覆盖范围。我正在更新我一直在使用的旧平台。

我最终要做的是:

1) 手动 Delete node_modules

2) 手动 Delete package-lock.json

3) sudo npm install node-sass --unsafe-perm=true --allow-root

4) sudo npm install node-sass-middleware --unsafe-perm=true --allow-root

得到以下帮助,谢谢!

Pre-built binaries not found for grpc@1.10.1 and node@10.9.0

Error: EACCES: permission denied when trying to install ESLint using npm

嘿,我按照以下步骤解决了这个错误

  • 首先我卸载了python3.8.6(最新版)[​​=28=]
  • 然后我安装了python 2.7.1 (任何Python 2版本会工作,但不会太老,推荐这样做)
  • 然后我将c:\python27添加到环境变量
  • 我的OS是windows,所以我跟着这个link
  • 有效

我在 Node 12.19.0yarn 1.22.5 Windows 10 上发现了同样的问题。我修复了通过安装最新的稳定 python 64 位并在 python 安装期间添加环境变量的路径来解决问题。 python 安装后,我为环境变量重新启动了我的机器。

错误消息表示它无法找到您的 python 可执行文件或二进制文件。

在很多情况下,它安装在 c:\python27。 如果还没有安装,可以用npm install --global windows-build-tools安装

将它添加到环境变量并不总是有效。 更好的选择是在 npm 配置中设置它。

npm config set python "C:\Python27\python.exe"

node-gyp 需要旧的 Python 2 - link

如果您没有安装它 - 请查看有关安装 windows-build-tools.

的其他答案

如果您像我一样安装了 新旧 Python 版本,那么 node-gyp 可能会尝试使用 Python 3. 这会导致以下 SyntaxError: invalid syntax 错误。

我找到一篇关于安装两个 Python 版本的文章。他们建议将 Python 2.* 可执行文件重命名为 python2.exe - link.

所以看起来 node-gyp 期望找到旧的 Python 2 重命名的可执行文件。因此错误消息:

...
gyp verb check python checking for Python executable "python2" in the PATH
gyp verb `which` failed Error: not found: python2
...

一旦我将 C:\Python27\python.exe 重命名为 C:\Python27\python2.exe,它就可以正常工作了。

当然,C:\Python27\C:\Python39\ 都必须在 PATH 变量中。并且不需要在 npm 配置中设置旧的 Python 版本。您的默认 Python 仍将是新的。

我有 node 15.x.x"node-sass": "^4.11.0"。 我在 node-sass 的发行说明中看到与 node-sass 4.11.0 兼容的节点最高版本是 11,所以我卸载了节点并重新安装了 11.15.0 版本(我正在使用 Windows). 检查 node-sass releases。 (this is what you should see in the node-sass releases.)

希望对我的英语有所帮助,对不起:)

对于 yarn 项目,使用“yarn install --ignore-engines”忽略节点版本将安装任何节点-sass v. 没有这些 python 错误

Python2 维护状态为 “生命周期结束”,因此它不会默认安装在新的 ubuntu 版本中。

安装最新的 python2.7 对我来说效果很好。

这是安装说明:

tar -xf Python-2.7.18.tgz
cd Python-2.7.18
./configure --enable-optimizations
sudo make altinstall

打开一个新终端并尝试 npm install

这是帮助我在运行基于旧 node-gyp v3.8.0.

构建项目时防止错误 Error: not found: python2 的原因
  1. 运行 npm install --global --production windows-build-tools@4.0.0
  2. %USERPROFILE%\.windows-build-tools\python27
  3. 中将 python.exe 重命名为 python2.exe
  4. 确保 %USERPROFILE%\.windows-build-tools\python27 是你的 PATH 环境变量的一部分(这是 windows-build-tools 应该已经为你做的)
  5. 下载Visual Studio 2017 Build Tools
  6. 告诉 npm 将 VS 2017 与 npm config set msvs_version 2017
  7. 一起使用
  8. 运行 使用 node-gyp 的脚本(node-gyp 现在会找到 python2.exe

备选方案:强制升级 node-gyp

您也可以尝试升级您的项目以使用 node-gyp v8.0.0 instead of node-gyp v3.8.0。在这种情况下,将以下 resolution 条目添加到您的 package.json:

  "resolutions": {
    "node-gyp": "8.0.0"
  }

之后,确保安装了 Python 3Visual Studio 2017 Build Tools and/or Visual Studio 2019 构建工具。你也可以运行npm config delete msvs_versionnode-gyp自动检测你的VS版本。

测试:

  • Windows 10 专业版 19042.985
  • Node.js v15.14.0
  • npm v7.7.6
  • node-gyp -v v3.8.0.

你也可以尝试使用 sass 模块而不是 node-sass:

npm install sass

如果您使用的是Visual Studio。按照以下步骤操作:

npm cache clean --force
npm config set msvs_version 2019 --global
npm install node-sass

几天前我遇到了同样的问题。相信我,他们不需要在您的项目或系统中安装或卸载其他依赖项。

我是如何解决这个问题的,让我分享一下我的经验。

  • 请转到package.json文件
  • 一直向下滚动到下方或搜索 optionalDependencies Object
  • 只需删除整个对象并保存文件
  • 试试 npm install,它会起作用

另一个可能的解决方案:

如果 node-sass 元素存在于 optionalDepedencies 对象中,请检查您的 package.json 文件然后您需要以这种方式 运行 npm 命令 npm install --no-optional 或者如果只是从 optionalDepedencies[= 中删除 node-sass 元素38=]对象

注意:此解决方案仅适用于 Angular 项目

enter image description here 请查看 package.json 文件

的屏幕截图

我们在 2021 年设置新的 TeamCity 构建代理时遇到了这个问题。最初我们使用 Chocolatey 安装了 nodejs。我们重新安装回到原来的安装程序 node-v12.12.0-x64.msi。安装程序对话框中的第三个屏幕提供安装编译本机模块所需的工具:

这样做之后,我们的问题就消失了。

您需要按照以下步骤修复错误:

    1: DELETE node_modules
    2: npm install node-sass@<version-as-per-below-table>
    3. npm install

每个 node-sass 版本对应一个特定的 Node.JS 构建。

以下是 node-sass (Check updates to below table here) 的最低和最高支持支持版本的快速指南:


| NodeJS  | Supported node-sass version | Node Module |
|---------|-----------------------------|-------------|
| Node 16 | 6.0+                        | 93          |
| Node 15 | 5.0+                        | 88          |
| Node 14 | 4.14+                       | 83          |
| Node 13 | 4.13+, <5.0                 | 79          |
| Node 12 | 4.12+                       | 72          |
| Node 11 | 4.10+, <5.0                 | 67          |
| Node 10 | 4.9+, <6.0                  | 64          |
| Node 8  | 4.5.3+, <5.0                | 57          |
| Node <8 | <5.0                        | <57         |

两个选项(2021 年 12 月):

  • 1 - 如果无法升级 node-sass 包!
    • 安装Python2并修改其.exe文件名。
    • 修复 PATH env 变量记录顺序(详情如下)。
  • 2 - 更新 node-sass 包。

先决条件

您在 Windows 10.Node.JS 更新到最新版本 (v16.13.1)。
您在项目文件夹中 运行 yarn installnpm install 并收到错误消息(见下文)。

选项 1. 安装 Python-2 并修复 PATH env

See MSI installer

安装后

注意! 如果在 x64 上出现以下错误,请尝试将最新的 Node.js 从 x64 重新安装到 x86。 (但是对于 x86,您也可能会收到内存限制错误。)

Error: Node Sass does not yet support your current environment: Windows 64-bit with Unsupported runtime (93)

PATH 环境变量中的 Python 条记录进行排序

Python3条记录必须在Python2条记录之上!

复制python.exepython2.exe

选项 2. 升级 node-sass 软件包

超过 package.json 个文件

修改项目文件夹中的 package.json 和 运行 yarn installnpm install
其他文件会自动更新。

之前

更新后:

或者使用 yarn 或 npm CLI 来做同样的事情,但它可能会显着改变你的 .lock 文件。

更新后您会发现您还需要更新 sass-loaderwebpack

您可能遇到的错误(仅供参考)

gyp verb check python checking for Python executable "python2" in the PATH
gyp verb `which` failed Error: not found: python2

gyp ERR! stack Error: Command failed: C:\Python310\python.EXE -c import sys; print "%s.%s.%s" % sys.version_info[:3];
gyp ERR! stack   File "<string>", line 1
gyp ERR! stack     import sys; print "%s.%s.%s" % sys.version_info[:3];
gyp ERR! stack                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
gyp ERR! stack SyntaxError: Missing parentheses in call to 'print'. Did you mean print(...)?

使用 npm 6.14.12 降级到节点 10.24.1 版本对我有用。 使用

安装 windows-build-tools

npm i -g windows-build-tools

我正在使用 Windows 11,我曾尝试使用 npm i -g windows-build-tools,但它永远卡住了。所以,对我有用的是:

  1. here 安装 Visual Studio 构建工具 2017。
  2. 安装后,以管理员身份打开 Powershell。
  3. 输入此命令:npm install --global --production windows-build-tools --vs2015
  4. 稍后谢谢我!

它在 Windows 11 上为我修复了与构建工具相关的所有错误。

如果更新节点版本,

npm i npm -g 将起作用。我 运行 解决了这个问题,npm install -g --production windows-build-tools 作为临时解决方案。但是升级 Node.js、NPM 和相关包版本是一个更好的长期选择。

在我的例子中,我在机器上安装了节点版本 v16,但反应项目使用 node-sass 版本 v4.x.x,更新 package.json 为 node-sass 到 v6.0.1 的版本解决了问题,
节点版本支持 node-sass 可以从官方 npm 页面检查:https://www.npmjs.com/package/node-sass

我在 Windows 11 机器上,为了修复它,我自己下载了 python27,使用 link:https://www.python.org/download/releases/2.7/.

安装后我运行这个命令:

npm config set python c:\python27\python.exe

我的 OS 是 Win 10 x64。 在执行 npm install 时发现了类似的问题。

  1. 检查节点版本是否适合node-sass版本。(参考上表。)升级或降级节点版本,如果需要

  2. 删除node_modules文件夹

    $ npm 安装 node-sass@

    $ npm 安装

做得好。

在 2022 年为我工作,实际上我们可以通过 npm 安装 python 2.7 python 2.7 安装后,我们可以使用 python 2.7

强制 运行 npm install

Sass

  1. npm install --global windows-build-tools --save
  2. npm install --python=python2.7

node-sass 已于 2020 年 10 月 26 日弃用

无需安装旧版本的 Python,只需迁移到 dart.sass

对于我的 ReactJS 项目 (npm),以下步骤对我有用:

  1. 从项目中删除node_modules

  2. 在package.json中删除这个 依赖:

    "dependencies": {
        …,
        "node-sass": "^3.0.0",
        …
    }
    
  3. npm install --save-dev sass

  4. npm install

  5. 现在尝试 运行使用 npm start

    调整您的项目
  6. 如果您收到“要导入 Sass 文件,您首先需要安装 node-sass”之类的错误,运行 此命令描述为
    npm install node-sass@npm:sass

如果您使用的是 yarn,请执行等效命令,但在最后一步执行此操作,如 :
所述 yarn remove node-sass
yarn add sass


转到package.json并更改

"node-sass": "4.14.1",

"node-sass": "^7.0.1",

它对我有用,之后我可以 运行 npm install

换句话说,您需要使用支持最新 python 版本的最新软件包。

注意: Node Saas 7.0.1 与“react-scripts”兼容:“5.0.0” 如果您的 package.json 有“react-scripts": "4.0.0", 然后改成

 "react-scripts": "5.0.0",