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
>
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)
(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)
@Pomex, I do agree that the error should be more informative. So I opened https://github.com/nodejs/node-gyp/pull/1269
Just for general context, for several reasons (which we try very hard to avoid in node) one of which is that python3 is not backwards compatible, python2 and python3 are two separate but equal branches living in parallel.
@Pomax same error i am getting how to fix this issue.. did you fixed this issue in your case??
In case anyone else lands here looking for the solution to this and wants to subscribe to the Python 3 support issue, it's #1337
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\npmnode_modules@angular\cli\bin;
C:\Program Filesnodejs;
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
It looks like the PythonFinder is broken for some reason. It just pop up an error that say it can't find the executable at "C:\Program_Files\Python\Python36\python.exe". This is wired,hah. The executable just here and it just can't find it??? After a little debug,I found it just go into the guessPython function and trying to find the "C:\python27\python.exe" and show with a "C:\Program_Files\Python\Python36\python.exe" misleading error message.
Installing Python 2.7.15 fixed this for me...
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.
There's a PR for this, but the maintainers don't seem to care: https://github.com/nodejs/node-gyp/pull/1335
any news ?
THIS IS SO IRRITATING....
I had the same issue but I resolved it by adding the system variables paths like @SatishMHiremath explained above and then moved these paths to the top of the list (very important)
Set the system variable path as well:
C:\Users\windowsusername\AppData\Roaming\npm
C:\Users\windowsusername\AppData\Roaming\npmnode_modules@angular\cli\bin;
C:\Program Filesnodejs;
Make sure these paths are at the top of the list instead of the default bottom
Restart cmd and good to go
@imimdou A workaround for now, but doesn't change the fact that gyp is using outdated python to run, not to mention that this is not an error that affects just angular - it's much more generic in nature.
separate but equal
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.
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"
node-gyp (or rather, gyp) needs python 2.7, python 3.x won't work.
this is exact reason why I HATE so much that so called Open-Lunatic-Broken-Source-Community
@jalle007 I know that it can be frustrating to wait for an issue to be resolved, but this is being worked on and comments that only voice such frustration are not helpful.
@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...
python2 and python3 are two separate but equal branches living in parallel.
At least for the next 9 months, 30 days, 2 hours, and 16 minutes.
i think i fixed this by installing
python as python v2
python2 as python v2
python3 as python v3
@ORESoftware Yes, that is a workaround, currently, but we're getting closer and closer to Python 2 being EOL, so gyp desperately needs to be updated.
This worked for me:
npm config delete python
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.json
npm install
Most helpful comment
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)