即使在设置%PYTHON%之后,Node.js(npm)也拒绝查找python

Tom*_*ica 16 javascript python node.js npm

所以我试图让Node.js工作.当然,它并不像宣传的那样容易:)

我碰巧在我的计算机上有两个python版本,但Node.js似乎只适用于较旧的版本,2.7.出错时,它还鼓励我将路径设置为PYTHON环境变量,并显示以下错误:

Error: Can't find Python executable "python2.7", you can set the PYTHON env variable.
Run Code Online (Sandbox Code Playgroud)

好的,我根据需要配置了变量:

C:\Users\Jakub>set PYTHON=C:\MYSELF\Programs\Python2.7\python.exe

C:\Users\Jakub>echo %PYTHON%
C:\MYSELF\Programs\Python2.7\python.exe
Run Code Online (Sandbox Code Playgroud)

你可以看到我曾经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)
Run Code Online (Sandbox Code Playgroud)

Tom*_*ica 45

我想出最稳定的解决方案是将pythonnpm内部值设置为实际路径:

npm config set python C:\Programs\Python2.7\python2.7.exe
Run Code Online (Sandbox Code Playgroud)

这会跳过所有环境变量和%PATH%废话,只需在安装时启动python.


iaa*_*nio 6

TL; DR使用名称python2.7.exe创建python.exe的副本或别名

我的python 2.7安装为

D:\app\Python27\python.exe

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

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.

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

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

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

  • @ DoubleU23,我建议使用npm config作为[TomášZato](http://stackoverflow.com/users/607407/tom%c3%a1%c5%a1-zato)的建议。这似乎是官方方式。我的建议是更多解决方法。 (2认同)