Node.js:由于node-sass和node-gyp, Python没有发现异常

突然在我的一个jenkins环境构建已经开始失败,而在本地机器,它似乎工作得很好,因为我有python安装,

从日志中,我能够检测到问题是内部依赖,即node-gyp v3.5.0来自node-sass v3.8.0,当我通过访问关于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

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

524292 次浏览

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

同样的问题,在我的电脑上安装不同版本的python时浪费了几个小时。简单地升级节点到最新版本v8.11.2和npm 5.6.0,然后安装node-sass@4.5.3,你就可以了。

最近我在Windows上遇到了这样的情况。我通过以下步骤修复它使用一个具有管理权限的PowerShell:

  1. 删除node_modulesfolder
  2. 以管理权限运行npm install --global windows-build-tools。(在我的情况下需要重启-和重启没有问!!)
  3. npm install重新安装节点模块或node-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时解释如何配置“npm”来找到你安装的python版本。记住,node-sass需要node-gyp(一个npm构建工具)来查找你的python路径。或者只是安装python,并遵循相同的解决方案(在链接中)。谢谢。

这是两年前的,但没有一个能帮到我。

我卸载了我的NodeJS v12.8.1 (Current),并安装了一个全新的v10.16.3 (LTS),我的ng build --prod工作了。

我的机器是Windows 10,我在尝试使用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 < / p >

我在使用node-sassnode-sass-middleware时有很多麻烦。它们是有趣的包,因为它们被广泛使用(每周有数百万次下载),但它们的github显示出有限的依赖性和覆盖范围。我当时正在更新自己开发的一个旧平台。

我最后不得不做的是:

手动Delete node_modules

手动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

我得到了以下帮助,谢谢!

未为grpc@1.10.1和node@10.9.0找到预构建的二进制文件

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

嘿,我通过以下步骤解决了这个错误

  • 第一次卸载python 3.8.6(最新版本)
  • 然后我安装了python 2.7.1 (任何Python 2版本将工作,但不是更老的,这是建议的)
  • 然后我将c:\python27添加到环境变量中
  • 我的操作系统是窗户,所以我遵循这个链接
  • 它工作

我发现Windows 10上的节点12.19.0纱1.22.5也存在同样的问题。我通过安装最新的稳定64位python并在python安装期间将路径添加到环境变量来解决这个问题。在安装python之后,我重启了我的机器以获取env vars。

错误信息意味着它无法定位您的python可执行文件或二进制文件。

在许多情况下,它被安装在c:\python27。 如果它还没有安装,你可以用npm install --global windows-build-tools来安装它,这只在它还没有安装的时候才会工作

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

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

node-gyp需要旧的Python 2 - 链接

如果你没有安装它-检查关于安装windows-build-tools的其他答案。

如果你像我一样有安装了新老版本的Python, node-gyp很可能会尝试使用Python 3。这将导致以下SyntaxError: invalid syntax错误。

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

因此,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版本(这是你应该在node-sass版本中看到的。) < / p >

希望这对你有所帮助,抱歉我的英语不好:)

对于yarn项目,忽略带有“yarn install——ignore-engines”的节点版本;将安装任何node-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中将python.exe重命名为python2.exe
  3. 确保%USERPROFILE%\.windows-build-tools\python27是你的PATH环境变量的一部分(这是windows-build-tools应该已经为你做的)
  4. 下载Visual Studio 2017构建工具
  5. 告诉npmnpm config set msvs_version 2017一起使用VS 2017
  6. 运行使用node-gyp的脚本(node-gyp现在会找到python2.exe)

可选:强制升级node-gyp

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

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

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

测试:

  • Windows 10 Pro Build 19042.985
  • node . js v15.14.0
  • npm v7.7.6
  • Node-gyp -v v3.8.0。

你也可以尝试使用sass module来代替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安装,它将工作

另一个可能的解决方案:

请检查你的包裹。如果node-sass元素存在于optionalDepedencies对象中,那么你需要运行npm命令,以这种方式npm install --no-optional或同样如果只是从optionalDepedencies对象中删除node-sass元素

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

在这里输入图像描述 请查看这个包的截图。json文件< / p >

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

enter image description here

这样做之后,我们的问题就解决了。

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

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

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

下面是node-sass (查看下面表格的更新)的最小和最大支持版本的快速指南:


| 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"包!
    • 安装Python 2并修改其.exe文件名。
    • 修复PATH env变量记录顺序(详细信息如下)。
  • 2 -更新node-sass包。

先决条件

你将Node.JS更新到Windows 10上的最新版本(v16.13.1)。
你在你的项目文件夹中运行yarn installnpm install,并收到一个错误(见下文)

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

最新的Python 2版本

参见MSI安装程序 enter image description here

安装后 Python安装

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

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

度假Python在PATH env变量中记录

Python 3的记录必须高于Python 2的记录!

PATH环境变量编辑

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

复制python.exepython2.exe

重命名python.exe到python2.exe .exe .

第二个选项。升级node-sass

package.json文件

修改package.json并在项目文件夹中运行yarn installnpm install

.其他文件将自动更新

 before for updating before update in package。json 之前

更新后:更新后

或者使用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. 在这里安装Visual Studio Build tools 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安装在机器上,但react项目使用节点sass版本v4.x.x,更新包。
. json with node-sass version to v6.0.1解决了这个问题 对node-sass的节点版本支持可以从npm官方页面检查:https://www.npmjs.com/package/node-sass

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

安装完成后,我运行了这个命令:

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

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

  1. 检查节点版本号是否与node-sass版本号一致。(参考以上表格)如果需要,升级或降级节点版本

  2. 删除node_modules文件夹

    install node-sass@

    $ NPM install

做得很好。

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

强制运行npm install

萨斯

  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. <李> < p >在包中。Json,删除这个 依赖:< / p >
    "dependencies": {
    …,
    "node-sass": "^3.0.0",
    …
    }
    
  3. < p > npm install --save-dev sass

  4. < p > npm install

  5. 现在尝试使用npm start运行您的项目

  6. 如果你收到类似“要导入Sass文件,你首先需要安装node- Sass”这样的错误,按照在这里:
    npm install node-sass@npm:sass < / p >

如果你正在使用yarn,执行相同的命令,但在最后一步执行此命令,如在这里所述:
yarn remove node-sass < br > yarn add sass < / p >

去包装。Json和更改

"node-sass": "4.14.1",

"node-sass": "^7.0.1",

它为我工作之后,我可以运行NPM安装

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

注意: Node Saas 7.0.1兼容"react-scripts";如果你的包裹。Json有“react-scripts": "4.0.0"

 "react-scripts": "5.0.0",

windows 11机器的一个简单解决方案是,

  • 删除package-lock。Json文件和node_modules/文件夹。
  • 以管理员身份打开Windows终端。
  • 执行命令npm i -g node-sass。
  • 进入项目文件夹并运行npm install
  • 现在用npm start运行项目

上面的答案没有一个能解决我的问题,它比我想象的要简单得多。

只需降低您的节点版本,以匹配node-sass版本:

nvm list
nvm user <node-version>