Node.js:由于node-sass和node-gyp,未找到Python异常


90

突然在我的一个jenkins环境中,构建开始失败,而在本地计算机中,由于安装了python,它似乎运行良好,

从日志中我能检测到的问题是内部的依赖是节点GYP V3.5.0节点萨斯v3.8.0当我访问研究,约节点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

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

Answers:


12

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


1
非常感谢您的努力,我能够找到节点模块中缺少node-sass软件包的问题,​​检查并发现确实存在版本问题,但是我的问题是由于连接超时,reset-cache并且目前看来工作正常,但是可以根据您的修复更新节点。
Vipul Panth

1
@nschonni我也面临着同样的错误。节点版本为7.7.1,npm为4.1.2。你能帮我这个忙吗?
Tanvi Garg's

Node(10.4.0),npm(6.1.0),node-sass(4.9.0)的相同问题
Saravanan Sachi,

这是否意味着我需要降级节点?我有节点12,需要安装node-sass 4.13。
mcv

否,节点12与4.13兼容
nschonni

163

所以最近我在Windows上发生了这种情况。我使用具有管理员权限的PowerShell按照以下步骤进行修复:

  1. 删除资料node_modules
  2. 跑步 npm install --global windows-build-tools
  3. 用以下命令重新安装节点模块或node-sass npm install

29
这是正确的答案。 npm install --global windows-build-tools安装Python 2.7,然后在全球进行安装(因此您不必根据每个项目重新安装)。它修复了“无法安装SASS”问题。注意:在Windows上,您必须以“管理员”身份运行npm命令提示符。
paulsm4 '18

它为我工作,Windows 10,节点v10.15.0,npm 6.7.0
Tasnim Reza

3
我也必须删除package-lock.json它才能使其正常工作。
ush189 '19

这对我有用,但是随后从Visual Studio文件夹中删除了MSBuild工具,随后我不得不重新安装这些工具。
uniquelau

1
这必须是公认的答案。非常感谢!
Mekey Salaria

13

我不得不:

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版本引起的。


谢谢!对我来说就是这样,一位同事正在使用旧版本的节点,而我正在使用12,因此它需要不同版本的node-sass。我将node-sass更新为4.12,并迫使我的同事升级到node 12,一切都很好!
杰森·马斯特斯

这几乎可以概括这个问题。Node-sass版本与nodejs的特定版本兼容。这确实应该有一个主要的版本变化来说明。低于4.12的节点将无法在节点12.14上使用
Robharrisaz

现在Windows x64上的节点14上都没有版本。我必须降级到节点12才能使其正常工作。
bonniss

13

我的机器是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

而且有效!!


2
npm install --global Windows-build-tools擦除package-lock.json和npm i -g node-sass解决了我的问题;
亚瑟·曾尼格

5

今年2岁,但没有一个帮助我。

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


5

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

我在使用node-sassnode-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

我有以下帮助,谢谢!

找不到针对grpc@1.10.1和node@10.9.0的预构建二进制文件

错误:EACCES:尝试使用npm安装ESLint时权限被拒绝


3

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

在许多情况下,它安装在c:\ python27。如果尚未安装,则可以使用进行安装npm install --global windows-build-tools,只有在尚未安装时,它才有效。

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

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


在npm config中设置python对我来说是一个很好的解决方案。
burntsugar

2

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


这对我有用,我一直在寻找这个时间!提示:如果要处理多个版本的Node.js,使用NVM确实有帮助。
j3ff

2

节点GYP需要老的Python 2 -链接

如果尚未安装,请检查有关安装Windows-build-tools的其他答案。

如果您像我一样,并且同时安装新旧版本的Python,则node-gyp可能会尝试使用Python3。这将导致以下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.exeC:\Python27\python2.exe它就可以正常工作。

当然,两者C:\Python27\C:\Python39\都必须在PATH变量中。无需在npm config中设置旧的Python版本。您的默认Python仍将是新的。


@RohanDevaki您的答案是完全不同的,因为您建议删除Python3。而我的建议是保留两个Python版本并重命名Python 2可执行文件。
Kostya Lyakh '20

@ ford04“ Python”,“错误消息”等不是代码。您应该已经拒绝了该编辑。参见meta.stackoverflow.com/q/360491/4284627
唐老鸭

1

看完所有答案之后,我注意到此解决方案可能会非常有帮助。它说明了如何在安装node-sass时配置“ npm”以找到已安装的python版本。请记住,node-sass需要使用node-gyp(一个npm构建工具)来查找您的python路径。或者只是安装python,然后按照给出的相同解决方案进行操作(在链接中)。谢谢。


0

我在Windows 10上发现了与Node 12.19.0yarn 1.22.5相同的问题。我通过安装最新的稳定的Python 64位并在python安装过程中向环境变量添加路径来解决了该问题。安装python之后,我为env vars重新启动了我的机器。


@RohanDevaki似乎您一直在建议很多编辑,将随机关键字格式化为代码。请住手。例如,“ Windows 10”,“节点12.19.0”,“ Python 64位”等不是代码,也不应该这样格式化。主持人请参阅这篇文章
唐老鸭

@DonaldDuck,好的,对不起,我不再重复。
罗汉·德瓦基

0

嘿,请按照以下步骤解决此错误

  • 首先,我卸载了python 3.8.6(最新版本)
  • 然后我安装了python 2.7.1 (任何Python 2版本都可以使用,但是版本不老,建议这样做)
  • 然后我添加c:\python27到环境变量
  • 我的操作系统是Windows,所以我点击了此链接
  • 有效

仅当您不需要Python3,并且没有依赖于它的应用程序时,这才是解决方案。
彼得·阿波林斯

是的,这是正确的,我认为您对python 2.7.1不会有任何问题。
罗汉·德瓦基
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.