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

ovfsdjhp  于 2022-09-21  发布在  Node.js
关注(0)|答案(30)|浏览(271)

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

当我通过访问this研究node-gyp时,我发现问题出在内部依赖上,即node-sass v3.8.0中的node-gyp v3.5.0,找到了需要安装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)JenkinsjobsNdbSite-hot-fix-Manual-PreBuildworkspacesrcNdbSite.UInode_moduleswhichwhich.js:13:12)
gyp verb `which` failed     at F (C:Program Files (x86)JenkinsjobsNdbSite-hot-fix-Manual-PreBuildworkspacesrcNdbSite.UInode_moduleswhichwhich.js:68:19)
gyp verb `which` failed     at E (C:Program Files (x86)JenkinsjobsNdbSite-hot-fix-Manual-PreBuildworkspacesrcNdbSite.UInode_moduleswhichwhich.js:80:29)
gyp verb `which` failed     at C:Program Files (x86)JenkinsjobsNdbSite-hot-fix-Manual-PreBuildworkspacesrcNdbSite.UInode_moduleswhichwhich.js:89:16
gyp verb `which` failed     at C:Program Files (x86)JenkinsjobsNdbSite-hot-fix-Manual-PreBuildworkspacesrcNdbSite.UInode_modulesisexeindex.js:44:5
gyp verb `which` failed     at C:Program Files (x86)JenkinsjobsNdbSite-hot-fix-Manual-PreBuildworkspacesrcNdbSite.UInode_modulesisexewindows.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)JenkinsjobsNdbSite-hot-fix-Manual-PreBuildworkspacesrcNdbSite.UInode_moduleswhichwhich.js:13:12)
gyp verb `which` failed     at F (C:Program Files (x86)JenkinsjobsNdbSite-hot-fix-Manual-PreBuildworkspacesrcNdbSite.UInode_moduleswhichwhich.js:68:19)
gyp verb `which` failed     at E (C:Program Files (x86)JenkinsjobsNdbSite-hot-fix-Manual-PreBuildworkspacesrcNdbSite.UInode_moduleswhichwhich.js:80:29)
gyp verb `which` failed     at C:Program Files (x86)JenkinsjobsNdbSite-hot-fix-Manual-PreBuildworkspacesrcNdbSite.UInode_moduleswhichwhich.js:89:16
gyp verb `which` failed     at C:Program Files (x86)JenkinsjobsNdbSite-hot-fix-Manual-PreBuildworkspacesrcNdbSite.UInode_modulesisexeindex.js:44:5
gyp verb `which` failed     at C:Program Files (x86)JenkinsjobsNdbSite-hot-fix-Manual-PreBuildworkspacesrcNdbSite.UInode_modulesisexewindows.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:Python27python.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)JenkinsjobsNdbSite-hot-fix-Manual-PreBuildworkspacesrcNdbSite.UInode_modulesnode-gyplibconfigure.js:454:19)
gyp ERR! stack     at Object.<anonymous> (C:Program Files (x86)JenkinsjobsNdbSite-hot-fix-Manual-PreBuildworkspacesrcNdbSite.UInode_modulesnode-gyplibconfigure.js:480:16)
gyp ERR! stack     at C:Program Files (x86)JenkinsjobsNdbSite-hot-fix-Manual-PreBuildworkspacesrcNdbSite.UInode_modulesgraceful-fspolyfills.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)JenkinsjobsNdbSite-hot-fix-Manual-PreBuildworkspacesrcNdbSite.UInode_modulesnode-sass
gyp ERR! node -v v5.10.1
gyp ERR! node-gyp -v v3.5.0
gyp ERR! not ok 
Build failed

如有任何想法,我们将不胜感激,谢谢。

1yjd4xko

1yjd4xko1#

以下是帮助我在基于旧的node-gyp v3.8.0运行项目时防止错误Error: not found: python2的方法。

1.运行npm install --global --production windows-build-tools@4.0.0
1.将%USERPROFILE%\.windows-build-tools\python27中的python.exe重命名为python2.exe
1.确保%USERPROFILE%\.windows-build-tools\python27是您的PATH环境变量的一部分(这是windows-build-tools应该已经为您做的事情)
1.下载Visual Studio 2017 Build Tools
1.告诉npmnpm config set msvs_version 2017一起使用VS 2017
1.运行使用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"
  }

之后,请确保您安装了Python3以及Visual Studio 2017构建工具和/或Visual Studio 2019构建工具。您还可以运行npm config delete msvs_version,让node-gyp自动检测您的VS版本。

测试对象为:

  • Windows 10专业版内部版本19042.985
  • Node.js v15.14.0
  • NPM v7.7.6
  • node-gyp-v v3.8.0。
polhcujo

polhcujo2#

我使用的是Windows 11,我曾尝试使用npm i -g windows-build-tools,但它永远不能使用。所以,对我起作用的是:

1.从here安装Visual Studio生成工具2017。
1.安装完成后,以管理员身份打开PowerShell。
1.输入命令:npm install --global --production windows-build-tools --vs2015
1.稍后再感谢我!

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

ukdjmx9f

ukdjmx9f3#

使用NPM 6.14.12降级到Node 10.24.1版本对我来说很管用。以及使用安装windows生成工具
Npm i-g窗口-构建-工具

xxls0lw8

xxls0lw84#

这也是我几天前面临的问题。相信我,他们不需要在您的项目或系统中安装或卸载其他依赖项。

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

  • 请转至Package.json文件
  • 一直向下滚动或搜索optionalDependency对象
  • 只需删除整个对象并保存文件
  • 尝试NPM安装,它会起作用

另一种可能的解决方案:

请检查您的Package.json文件。如果optionalDepers对象内存在node-sass元素,则需要以这种方式运行npm命令npm install --no-optional;或者,如果只是从optionalDepedency对象中删除node-sass元素,则需要运行npm命令

  • 注:此解决方案仅适用于ANGLE项目*

enter image description here请查看这个Package.json文件的屏幕截图

zdwk9cvp

zdwk9cvp5#

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

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

wdebmtf26#

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

npm install sass
b91juud3

b91juud37#

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

  • 删除Package-lock.json文件和NODE_MODULES/文件夹。
  • 以管理员身份打开Windows终端。
  • 运行命令npm i-g node-sass。
  • 转到项目文件夹并运行NPM安装
  • 现在使用NPM Start运行项目
jdgnovmf

jdgnovmf8#

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

wlsrxk51

wlsrxk519#

我在Windows 10上发现了节点12.19.0Yarn1.22.5同样的问题。我修复了这个问题,我安装了最新的稳定的64位Python64位,并在安装时添加了环境变量的路径。在安装了python之后,我重新启动了机器以获取env vars。

wlwcrazw

wlwcrazw10#

Python2的维护状态是**“生命周期结束”**,所以在新的ubuntu版本中默认不安装它。

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

以下是安装它的说明:

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

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

yqkkidmi

yqkkidmi11#

在YAR项目的情况下,忽略节点版本,并使用“YAR INSTALL--Ignore-Engines”将安装任何node-sass v,而不会出现这些python错误

7uzetpgm

7uzetpgm12#

在看了所有的答案后,我注意到这个解决方案可能非常有帮助。它解释了安装node-sass时的how to configure "npm" to find your installed python version。请记住,node-sass需要node-gyp(一种NPM构建工具)来查找您的python路径。或者只需安装Python,并遵循(在链接中)给出的相同解决方案。谢谢。

2guxujil

2guxujil13#

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

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

l7wslrjt

l7wslrjt14#

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

3z6pesqy

3z6pesqy15#

在2022年为我工作,实际上我们可以安装到npm的python2.7之后,我们可以使用python 2.7强制运行npm install

沙司

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

相关问题