Node.js (npm)在设置了%PYTHON%变量后仍无法找到python。

18

我正在尝试让Node.js工作。当然,这并不像宣传的那么容易 :)

我在电脑上有两个Python版本,但是Node.js似乎只能与较旧的2.7版本兼容。当出现错误时,它还鼓励我将路径设置为PYTHON环境变量,并显示以下错误:

Error: Can't find Python executable "python2.7", you can set the PYTHON env variable.

好的,那么我已按照要求配置了所需的变量:
C:\Users\Jakub>set PYTHON=C:\MYSELF\Programs\Python2.7\python.exe

C:\Users\Jakub>echo %PYTHON%
C:\MYSELF\Programs\Python2.7\python.exe

您可以看到我使用了echo来检查变量是否真的被设置了。不幸的是,那个npm东西无法读取它,错误再次出现。这是在我设置%PYTHON%变量后完整的日志:

C:\Users\Jakub>npm install minecraft-protocol
\


> ursa@0.8.5 install C:\Users\Jakub\node_modules\minecraft-protocol\node_modules\ursa
> node-gyp rebuild

|
C:\Users\Jakub\node_modules\minecraft-protocol\node_modules\ursa>if not defined npm_config_node_gyp (node "C:\Program Files (x86)\nodejs\node_modules\npm\bin\node-gyp-bin\\..\..\no
de_modules\node-gyp\bin\node-gyp.js" rebuild )  else (rebuild)
gyp ERR! configure error
gyp ERR! stack Error: Can't find Python executable "python2.7", you can set the PYTHON env variable.
gyp ERR! stack     at failNoPython (C:\Program Files (x86)\nodejs\node_modules\npm\node_modules\node-gyp\lib\configure.js:103:14)
gyp ERR! stack     at C:\Program Files (x86)\nodejs\node_modules\npm\node_modules\node-gyp\lib\configure.js:64:11
gyp ERR! stack     at FSReqWrap.oncomplete (evalmachine.<anonymous>:95:15)

使用"set"命令更改环境变量只在cmd窗口的持续时间内生效。 - Rob Foley
我没有关闭窗口 - 在配置变量后,立即在同一个窗口中发出了 npm install ... 命令。 - Tomáš Zato
我在Windows 10上遇到了类似的问题。最终我卸载了Node、Python、Electron和NPM,重启了电脑,重新安装了Node、Python、Electron和NPM,然后再次重启电脑,才终于解决了问题。gyp + windows = 笑话 - Shawn Whinnery
7个回答

58
我发现最稳定的解决方案是将python npm的内部值设置为实际路径:
npm config set python C:\Programs\Python2.7\python2.7.exe

该命令跳过所有环境变量和%PATH%相关内容,直接在Python安装目录启动Python。


1
设置环境变量对我也没有用。这个答案有效!谢谢。 - pcormier
请确保您已安装正确的版本! - Fintan Kearney
在我的配置文件中,我必须明确地添加 pythonPYTHON 才能使 gyp 运行。 - BayssMekanique

7

TL;DR 将 python.exe 复制或重命名为 python2.7.exe

我的 Python 2.7 安装在

D:\app\Python27\python.exe
上。

无论我如何设置(并验证) PYTHON 环境变量,我总是遇到这个错误:

gyp ERR! stack Error: Can't find Python executable "python2.7", you can set the PYTHON env variable.
gyp ERR! stack     at 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。

我通过创建一个别名解决了这个问题:

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

你需要管理员权限才能执行此操作。


我采用了相同的方法,但这并没有解决我的问题。 - DoubleU23
2
@DoubleU23,我建议按照Tomáš Zato的建议使用npm config。这似乎是官方的方法。我的建议更像是一个解决方法。 - iaarnio

2

如果你是在Windows系统下设置环境变量,那么请在设置完成后重新打开终端。但如果你使用的是Linux系统,则无需重启终端。


这是一个答案还是评论?无论如何,为什么我需要重新启动终端(没有起作用)? - Tomáš Zato

1
这对我有用:

这适用于我:

npm config set python C:\Users\<username>\.windows-build-tools\python27\python.exe

根据实际情况设置Python可执行文件的路径。 希望这可以帮到你 :-)


对我也起作用...感谢详细的信息 (y) - CodeChanger

1
在 Windows 上,转到目录 C:\Users\<<你的用户名>>\.windows-build-tools\python27,将 python.exe 复制并粘贴到同一目录下,并将其重命名为 python.2.7.exe

1
这就是解决方案!!!只有一个小错误,只需将其修改为python2.7.exe,不需要额外的 . - George Tiganila

1

我尝试了所有方法,但都没有成功,后来我使用这个链接在此位置C:\Python27\python.exe安装了Python。


0
这对我来说是管理员与本地用户的问题!
请在不同的线程中查看我的步骤,点击这里

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接