Skip to content

gyp can't find Python, despite Python running when you type "python" #1268

@Pomax

Description

@Pomax

I'm trying to install windows-registry on Windows 10 with Node 8.2.1 and NPM 5.3.0, and when the ref dependency is hit, node-gyp kicks in. However, it seems to fail when it tries to run python, despite the fact that python has a PATH entry and will run perfectly fine both when just executing "python" on the command line, or when exec/spawning a command called "python".

The error log is as follows:

c:\Users\Mike\Documents\git\temp\pluginboutique>npm install windows-registry

> [email protected] install c:\Users\Mike\Documents\git\temp\pluginboutique\node_modules\ref
> node-gyp rebuild


c:\Users\Mike\Documents\git\temp\pluginboutique\node_modules\ref>if not defined npm_config_node_gyp (node "C:\Program Files\nodejs\node_modules\npm\bin\node-gyp-bin\\..\..\node_modules\node-gyp\bin\node-gyp.js" rebuild )  else (node "" rebuild )
gyp ERR! configure error
gyp ERR! stack Error: Can't find Python executable "C:\Program Files\Python35\python.EXE", you can set the PYTHON env variable.
gyp ERR! stack     at PythonFinder.failNoPython (C:\Program Files\nodejs\node_modules\npm\node_modules\node-gyp\lib\configure.js:483:19)
gyp ERR! stack     at PythonFinder.<anonymous> (C:\Program Files\nodejs\node_modules\npm\node_modules\node-gyp\lib\configure.js:508:16)
gyp ERR! stack     at C:\Program Files\nodejs\node_modules\npm\node_modules\graceful-fs\polyfills.js:284:29
gyp ERR! stack     at FSReqWrap.oncomplete (fs.js:152:21)
gyp ERR! System Windows_NT 10.0.15063
gyp ERR! command "C:\\Program Files\\nodejs\\node.exe" "C:\\Program Files\\nodejs\\node_modules\\npm\\node_modules\\node-gyp\\bin\\node-gyp.js" "rebuild"
gyp ERR! cwd c:\Users\Mike\Documents\git\temp\pluginboutique\node_modules\ref
gyp ERR! node -v v8.2.1
gyp ERR! node-gyp -v v3.6.2
gyp ERR! not ok
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: [email protected] (node_modules\fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for [email protected]: wanted {"os":"darwin","arch":"any"} (current: {"os":"win32","arch":"x64"})

npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! [email protected] install: `node-gyp rebuild`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the [email protected] install script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

I don't understand why there would be any reason to be looking for Python in the indicated locations when there is already a PATH binding that makes python run just fine:

c:\Users\Mike\Documents\git\temp\pluginboutique>python
Python 3.5.2 (v3.5.2:4def2a2901a5, Jun 25 2016, 22:18:55) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>

But even then, that is the correct location as is evidenced by:

c:\Users\Mike\Documents\git\temp\pluginboutique>"C:\Program Files\Python35\python.EXE"
Python 3.5.2 (v3.5.2:4def2a2901a5, Jun 25 2016, 22:18:55) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>

And even node will happily run "python" through exec/spawn:

c:\Users\Mike\Documents\git\temp\pluginboutique>node
> var spawn = require('child_process').spawn;
undefined
> var willError = spawn('obviousnonexistentcommand');
undefined
> Error: spawn obviousnonexistentcommand ENOENT
    at exports._errnoException (util.js:1024:11)
    at Process.ChildProcess._handle.onexit (internal/child_process.js:192:19)
    at onErrorNT (internal/child_process.js:374:16)
    at _combinedTickCallback (internal/process/next_tick.js:138:11)
    at process._tickDomainCallback (internal/process/next_tick.js:218:9)
> var python = spawn('python');
undefined
>

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions