node-gyp: gyp can't find Python, despite Python running when you type "python"
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
> ref@1.3.4 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: fsevents@1.1.2 (node_modules\fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@1.1.2: wanted {"os":"darwin","arch":"any"} (current: {"os":"win32","arch":"x64"})
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! ref@1.3.4 install: `node-gyp rebuild`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the ref@1.3.4 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
>
About this issue
- Original URL
- State: closed
- Created 7 years ago
- Reactions: 14
- Comments: 27 (5 by maintainers)
node-gyp (or rather, gyp) needs python 2.7, python 3.x won’t work.
That sounds… weird, in 2017? It’s been many, many years by now for codebases to update to something that will run just fine on modern python.
But, if you’re right: the error does not in any way mention this, so if that’s really the problem the error message needs to be changed here so that users understand what’s wrong and can address that.
(I don’t use python except for my work, and all that work involves Python 3. so as a JS developer I have no reason to install an older version of Python unless something tells me it needs it)
It’s 2018, and this is still an issue.
This issue is becoming even bigger as Python2 is being phased out (It can’t even be downloaded from the front page anymore, you have to go through “other downloads” on python.org), this is something that needs fixing.
This worked for me:
THIS IS SO IRRITATING…
If someone wondering where that python path is stored its in npm config which is “.npmrc” you can get the config values by “npm config list” or get individual values by “npm config get” set it with “npm config set”
https://docs.npmjs.com/cli/config
For those coming to this thread still, I fixed this issue. I’m not sure which combination of these steps worked, but the final 2 steps are critical.
choco install python2
delete node_modules delete npm-cache delete package-lock.jsonnpm install
I have faced and fixed this issue relates node-sass and python error.Try installing latest angular cli command with the steps below
Set the system variable path as well: C:\Users\windowsusername\AppData\Roaming\npm
C:\Users\windowsusername\AppData\Roaming\npm\node_modules@angular\cli\bin;
C:\Program Files\nodejs;
Then start using angular cli command prompt using: angular client project folder path>npm install -g @latest
angular client project folder path>npm install -g node-gyp
@addaleax that is to be expected though, innit? Look at the issue opening date! Not to mention, the issue got closed without a proper fix…
2 < 3
The “separate but equal” thing is outdated anyway, it was true when written but as @golyalpha mentions later py2 is now being phased out and no longer supported.
Installing Python 2.7.15 fixed this for me…
@Pomax same error i am getting how to fix this issue… did you fixed this issue in your case??