在Windows上运行Python以获取Node.js依赖项


226

我正在进入Node.js代码库,该代码库要求我通过NPM(即jQuery)下载一些依赖项。

在尝试运行时npm install jquery,我不断出现此错误:

Your environment has been set up for using Node.js 0.8.21 (x64) and NPM

C:\Users\Matt Cashatt>npm install jquery
npm http GET https://registry.npmjs.org/jquery
npm http 304 https://registry.npmjs.org/jquery
npm http GET https://registry.npmjs.org/jsdom
npm http GET https://registry.npmjs.org/xmlhttprequest
npm http GET https://registry.npmjs.org/htmlparser/1.7.6
npm http GET https://registry.npmjs.org/location/0.0.1
npm http GET https://registry.npmjs.org/navigator
npm http GET https://registry.npmjs.org/contextify
npm http 304 https://registry.npmjs.org/htmlparser/1.7.6
npm http 304 https://registry.npmjs.org/xmlhttprequest
npm http 304 https://registry.npmjs.org/location/0.0.1
npm http 304 https://registry.npmjs.org/navigator
npm http 304 https://registry.npmjs.org/jsdom
npm http 304 https://registry.npmjs.org/contextify
npm http GET https://registry.npmjs.org/bindings
npm http GET https://registry.npmjs.org/cssom
npm http GET https://registry.npmjs.org/cssstyle
npm http GET https://registry.npmjs.org/request
npm http 304 https://registry.npmjs.org/bindings

> contextify@0.1.4 install C:\Users\Matt Cashatt\node_modules\jquery\node_module
s\contextify
> node-gyp rebuild


C:\Users\Matt Cashatt\node_modules\jquery\node_modules\contextify>node "C:\Progr
am Files\nodejs\node_modules\npm\bin\node-gyp-bin\\..\..\node_modules\node-gyp\b
in\node-gyp.js" rebuild
npm http 304 https://registry.npmjs.org/cssstyle
npm http 304 https://registry.npmjs.org/cssom
npm http 304 https://registry.npmjs.org/request
gyp ERR! configure error
gyp ERR! stack Error: Can't find Python executable "python", you can set the PYT
HON env variable.
gyp ERR! stack     at failNoPython (C:\Program Files\nodejs\node_modules\npm\nod
e_modules\node-gyp\lib\configure.js:113:14)
gyp ERR! stack     at C:\Program Files\nodejs\node_modules\npm\node_modules\node
-gyp\lib\configure.js:82:11
gyp ERR! stack     at Object.oncomplete (fs.js:297:15)
gyp ERR! System Windows_NT 6.1.7601
gyp ERR! command "node" "C:\\Program Files\\nodejs\\node_modules\\npm\\node_modu
les\\node-gyp\\bin\\node-gyp.js" "rebuild"
gyp ERR! cwd C:\Users\Matt Cashatt\node_modules\jquery\node_modules\contextify
gyp ERR! node -v v0.8.21
gyp ERR! node-gyp -v v0.8.4
gyp ERR! not ok
npm ERR! error rolling back Error: ENOTEMPTY, rmdir 'C:\Users\Matt Cashatt\node_
modules\jquery\node_modules\jsdom\node_modules\request\tests'
npm ERR! error rolling back  jquery@1.8.3 { [Error: ENOTEMPTY, rmdir 'C:\Users\M
att Cashatt\node_modules\jquery\node_modules\jsdom\node_modules\request\tests']
npm ERR! error rolling back   errno: 53,
npm ERR! error rolling back   code: 'ENOTEMPTY',
npm ERR! error rolling back   path: 'C:\\Users\\Matt Cashatt\\node_modules\\jque
ry\\node_modules\\jsdom\\node_modules\\request\\tests' }
npm ERR! contextify@0.1.4 install: `node-gyp rebuild`
npm ERR! `cmd "/c" "node-gyp rebuild"` failed with 1
npm ERR!
npm ERR! Failed at the contextify@0.1.4 install script.
npm ERR! This is most likely a problem with the contextify package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR!     node-gyp rebuild
npm ERR! You can get their info via:
npm ERR!     npm owner ls contextify
npm ERR! There is likely additional logging output above.

npm ERR! System Windows_NT 6.1.7601
npm ERR! command "C:\\Program Files\\nodejs\\\\node.exe" "C:\\Program Files\\nod
ejs\\node_modules\\npm\\bin\\npm-cli.js" "install" "jquery"
npm ERR! cwd C:\Users\Matt Cashatt
npm ERR! node -v v0.8.21
npm ERR! npm -v 1.2.11
npm ERR! code ELIFECYCLE
npm ERR! Error: ENOENT, lstat 'C:\Users\Matt Cashatt\node_modules\jquery\node_mo
dules\jsdom\node_modules\request\tests\test-pipes.js'
npm ERR! If you need help, you may report this log at:
npm ERR!     <http://github.com/isaacs/npm/issues>
npm ERR! or email it to:
npm ERR!     <npm-@googlegroups.com>

npm ERR! System Windows_NT 6.1.7601
npm ERR! command "C:\\Program Files\\nodejs\\\\node.exe" "C:\\Program Files\\nod
ejs\\node_modules\\npm\\bin\\npm-cli.js" "install" "jquery"
npm ERR! cwd C:\Users\Matt Cashatt
npm ERR! node -v v0.8.21
npm ERR! npm -v 1.2.11
npm ERR! path C:\Users\Matt Cashatt\node_modules\jquery\node_modules\jsdom\node_
modules\request\tests\test-pipes.js
npm ERR! fstream_path C:\Users\Matt Cashatt\node_modules\jquery\node_modules\jsd
om\node_modules\request\tests\test-pipes.js
npm ERR! fstream_type File
npm ERR! fstream_class FileWriter
npm ERR! code ENOENT
npm ERR! errno 34
npm ERR! fstream_stack C:\Program Files\nodejs\node_modules\npm\node_modules\fst
ream\lib\writer.js:284:26
npm ERR! fstream_stack Object.oncomplete (fs.js:297:15)
npm ERR!
npm ERR! Additional logging details can be found in:
npm ERR!     C:\Users\Matt Cashatt\npm-debug.log
npm ERR! not ok code 0

C:\Users\Matt Cashatt>

失败似乎是由于缺少Python安装导致的。好了,我已经安装了Python,设置了变量,然后重新启动,仍然是错误。

关于我所缺少的任何线索吗?


1
您可以将文本粘贴为文本而不是图像吗?除了难以阅读(尤其是因为它显然已经缩小了已经低分辨率的位图字体)之外,它还是不可复制的。
abarnert

1
更重要的是:如何在重启之前设置环境变量?如果您只是PYTHON=C:\Python27\Python.exe在cmd窗口中操作并重新启动,则该设置将丢失。
abarnert

7
另外,您安装了哪个Python版本?至少waf和gyp的较旧版本需要2.x,但未对此有任何说明,如果安装了3.x,它将给出各种神秘的错误。
abarnert

感谢您的意见。我已经以文本格式发布了错误。我正在使用v2.7
Matt Cashatt

可以,但是请回答“更重要”的问题,因为正如文本所暗示的那样,这很重要。您可能还想自己测试一下:在cmd.exe窗口中,尝试npm命令之前,是启动Python解释程序python还是%PYTHON%启动Python解释程序?如果没有,则说明您设置不正确。
abarnert

Answers:


132

您的问题是您没有设置环境变量。

该错误清楚地表明:

gyp ERR! stack Error: Can't find Python executable "python", you can set the PYTHON env variable.

在评论中,您说您这样做:

set PYTHONPATH=%PYTHONPATH%;C:\My_python_lib

很好,但是没有设置PYTHON变量,而是设置了PYTHONPATH变量。


同时,仅使用set命令只会影响当前cmd会话。如果重新启动之后(如您所说的那样),最终将导致一个全新的cmd会话,其中未设置该变量。

有几种方法可以永久性地设置环境变量-最简单的方法是在XP的系统控制面板中,当然在Vista中有所不同,在7中又有所不同,在8中又有所不同,但是您可以用google搜索。

或者,只需setnpm命令前执行正确操作,而无需在两者之间重新引导。


您可以通过执行与配置脚本完全相同的操作来测试您是否正确完成了操作:在运行之前npm,请尝试运行%PYTHON%。如果做对了,您将获得一个Python解释器(您可以立即退出)。如果遇到错误,则说明您做错了。


这有两个问题:

set PYTHON=%PYTHON%;D:\Python

首先,您将设置PYTHON;D:\Python。多余的分号适用于以分号分隔的路径列表(例如PATHor)PYTHONPATH,但不适用于单个值(例如)PYTHON。同样,当您要向路径列表中添加另一个路径而不是为单个值添加新值时,则需要在现有值上添加一个新值。因此,您只需要set PYTHON=D:\Python

其次,D:\Python不是您的Python解释器的路径。就像D:\Python\Python.exeD:\Python\bin\Python.exe。找到正确的路径,确保它可以独立运行(例如,键入D:\Python\bin\Python.exe并确保您拥有Python解释器),然后设置变量并使用它。


所以:

set PYTHON=D:\Python\bin\Python.exe

或者,如果要使其永久不变,请在“控制面板”中执行等效操作。


1
好,所以我得到:Microsoft Windows [Version 6.1.7601]版权所有(c)2009 Microsoft Corporation。版权所有。C:\ Users \ Matt Cashatt> set PYTHON =%PYTHON%; D:\ Python C:\ Users \ Matt Cashatt>%PYTHON%'%PYTHON%'不被识别为内部或外部命令,可操作程序或批处理文件。C:\ Users \ Matt Cashatt>
Matt Cashatt

1
另外,D如果您想知道,驱动器是我安装Python的地方。再次感谢您的帮助。
Matt Cashatt

像魅力一样工作,谢谢!对于其他用户:set由于某种原因,我不得不在NPM命令窗口中运行该mpm install jquery命令,然后立即运行该命令。如果我单独做它们,则由于某种原因它不起作用。
马特·卡察特

@MatthewPatrickCashatt:正如我所解释的,该set命令仅影响当前cmd窗口,因此您必须npm在同一窗口中运行之前执行此操作。如果要更永久地设置环境变量,则在“系统控制面板”中,或者与您的Windows版本等效。
abarnert

3
@abarnert是该问题的实际答案,然后设置PYTHON = D:\ Python \ bin \ Python.exe-如果您给出正确的方法以及解释错误的方法,这将很有帮助
14

449

如果您尚未安装python以及所有node-gyp依赖项,只需使用管理员权限打开Powershell或Git Bash并执行:

npm install --global --production windows-build-tools

然后安装该软件包:

npm install --global node-gyp

安装完成后,将下载所有的node-gyp依赖项,但仍需要环境变量。确实在正确的文件夹中找到了验证Python:

C:\Users\ben\.windows-build-tools\python27\python.exe 

注意-它使用python 2.7而不是3.x,因为它不受支持

如果没有抱怨,请继续创建您的(用户)环境变量:

setx PYTHON "%USERPROFILE%\.windows-build-tools\python27\python.exe"

重新启动cmd,并验证变量是否存在set PYTHON,应通过该变量返回变量

最后重新申请 npm install <module>


1
我有一些权限错误,但设法从以下位置手动安装python:C:\ Users [me] \。windows-build-tools \ python.msi。在安装中,可以选择将其添加到路径。(重新启动cmd / PS),它起作用了
d.raev

我得到的错误dh键太小:openssk \ ssl \ s3_clnt,c:3641
user1428716

14
安装Windows-build-tools必需的PowerShell在Windows 10上以Admin身份运行。这意味着setx命令成为setx PYTHON $env:USERPROFILE\.windows-build-tools\python27\python.exe
Bae

我确实必须在提升权限的命令提示符下运行这些命令,但似乎已经奏效。手动安装Python 3.x并将PYTHON环境变量设置为指向它不起作用。我假设我的错误与python版本控制的差异有关?谢谢,不管!
JeffryHouser

16

对我来说,安装带有以下注释的Windows-build-tools之后

npm --add-python-to-path='true' --debug install --global windows-build-tools

运行下面的代码

npm config set python "%USERPROFILE%\.windows-build-tools\python27\python.exe"

工作了。


我还需要上述两个步骤。我还要补充一点,对我来说(Windows 10 Pro 1803,节点v10.15.3,npm v6.9.0),当我运行第一步,即“ npm install windows-build-tools”步骤时,该安装似乎从未完成后,它似乎循环不断(将相同的输出行反馈到控制台)。在看了看似无休止的循环数分钟之后,我选择使用Ctrl + C来“结束批处理作业”。一切都按预期工作,中断循环似乎不是问题。
StackOverflowUser


10

其中一个和/或多个应该有助于:

  1. 添加C:\Python27\PATH变量中(考虑到此目录中已安装Python)
    如何设置环境PATH变量:http : //www.computerhope.com/issues/ch000549.htm
    设置变量后,重新启动控制台和/或Windows。

  2. 在与上述相同的部分(“环境变量”)中,添加具有名称PYTHON和值的新C:\Python27\python.exe
    变量。设置变量后,重新启动控制台和/或Windows。

  3. 在Admin模式下打开Windows命令行(cmd)。 将目录更改为您的Python安装路径: 进行某些安装需要符号链接:
    cd C:\Python27
    mklink python2.7.exe python.exe

请注意,您应该具有Python 2.x而非NOT 3.x来运行node-gyp基于基础的安装!

以下文字是关于Unix的,但Windows版本也需要Python 2.x:

You can install with npm:

$ npm install -g node-gyp
You will also need to install:

On Unix:
python (v2.7 recommended, v3.x.x is not supported)
make
A proper C/C++ compiler toolchain, like GCC

本文可能也有帮助:https : //github.com/nodejs/node-gyp#installation


8

我遇到了同样的问题,这些答案都没有帮助。在我的情况下,PYTHON变量设置正确。但是python安装得太深,即路径太长。因此,我做了以下工作:

  1. 将python重新安装到c:\ python
  2. 将环境变量PYTHON设置为C:\ python \ python.exe

就是这样!



6

有一些解决此问题的方法:1)以“管理员”身份运行命令提示符。

如果第一个解决方案不能解决您的问题,请尝试以下方法:

2)在管理员粘贴以下代码行的情况下打开命令提示符,然后按Enter键:

npm install --global --production windows-build-tools

5

TL; DR使用名称python2.7.exe复制python.exe或别名

我的python 2.7安装为

D:\ app \ Python27 \ python.exe

无论我如何设置(并验证)PYTHON env变量,我总是会收到此错误:

糟糕!错误:找不到Python可执行文件“ python2.7”,您可以设置PYTHON env变量。
糟糕!在failNoPython处堆栈(C:\ Program Files \ nodejs \ node_modules \ npm \ node_modules \ node-gyp \ lib \ configure.js:103:14)

原因是在node-gyp的configure.js中,python可执行文件的解析方式如下:

var python = gyp.opts.python || process.env.PYTHON || 'python'

结果发现gyp.opts.python的值是python2.7,因此覆盖了process.env.PYTHON。

我通过为名称为node-gyp的python.exe可执行文件创建别名来解决此问题:

D:\app\Python27>mklink python2.7.exe python.exe

您需要此操作的管理员权限。


5

以下内容以管理员身份在命令行为我工作:

安装Windows-Build-tools(这可能需要15-20分钟):

 npm --add-python-to-path='true' --debug install --global windows-build-tools

添加/更新环境变量:

setx PYTHON "%USERPROFILE%\.windows-build-tools\python27\python.exe"

安装node-gyp:

npm install --global node-gyp

将exe文件的名称从Python更改为Python2.7。

C:\Users\username\.windows-build-tools\python27\Python2.7

npm install module_name --save




4

正确的方法是1)从此处下载并安装python 2.7.14 。2)从这里为python设置环境变量。

完成!

注意:请相应地设置环境变量。我在这里为窗户回答。


4

在尝试安装node-sass@4.9.4时遇到了同样的挑战。

在查看了当前的官方文档并阅读了上面的答案之后,我注意到您可能不一定必须安装node-gyp或Windows构建工具。这就是它所说的,关于在Windows上安装node-gyp。请记住,node-gyp参与了node-sass的安装过程。而且您实际上不必重新安装另一个python版本。

这是一个救星,在安装任何需要构建工具的软件包时配置“ npm”应查找的python路径。

C:\> npm config set python /Python36/python

我已经在Windows-7上安装了python3.6.3。


node-sass@4.9.4当我切换到windows-10,使用node@10.6.3和时,相同的解决方案对我也有效yarn@1.19.1
MwamiTovi '19

请注意,这Python36/python应该是您的python可执行文件的路径.exe
MwamiTovi

如果是新的,请转到安装了python可执行文件的位置。在Windows中,按hold Shift, and Right-Click并输入以下内容:npm config set python
MwamiTovi

2

为什么不在这里下载python安装程序?当您检查路径安装时,它将为您工作


2

对我来说,这些步骤解决了这个问题:

1-以管理员身份运行此cmd:

npm install --global --production windows-build-tools

2-然后npm rebuild在第一步完成后运行(尤其是完成python 2.7安装,这是问题的主要原因)


1

这是正确的命令:set path =%path%; C:\ Python34 [替换为正确的python安装路径]

我有同样的问题,我只是这样解决了。

正如其他人指出的那样,这是易失性配置,它仅适用于当前的cmd会话,并且(显然)您必须在运行npm install之前设置路径。

我希望这有帮助。


1

糟糕!配置错误gyp ERR!堆栈错误:找不到Python可执行文件“ python”,您可以设置PYT HON env变量。

无需重新安装,此异常由node-gyp脚本引发,然后尝试重新构建。设置环境变量就足够了,就像我所做的那样:

SET PYTHON=C:\work\_env\Python27\python.exe

1

如果您尝试在Cygwin上使用此功能,则需要按照答案中的说明进行操作。(这是Cygwin如何处理Windows符号链接的问题。)


1

例子:pg_config不可执行/错误node-gyp

解决方案:在Windows上,只需尝试添加PATH Env-> C:\ Program Files \ PostgreSQL \ 12 \ bin

为我工作,现在我可以使用npm我pg-promise例如或其他依赖项。


pg-promise您不需要此。你可能是赶上了这个。只需使用最新版本,就可以了,不需要任何多余的东西;)
vitaly-t

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.