swiss_knight
swiss_knight

Reputation: 7901

npm install npm ERR! gyp verb `which` failed Error: not found: python2

On Ubuntu 21.10, where Python2.x is actually not installed, I'm facing the following error when executing "npm install" on a large project (the package.json is large but these two lines may be relevant:

...
  "devDependencies": {
    ...
    "sass": "^1.46.0",
    "sass-loader": "10.1.1",
...

)

$ npm install

npm ERR! code 1
npm ERR! git dep preparation failed
npm ERR! command /usr/bin/node /usr/lib/node_modules/npm/bin/npm-cli.js install --force --cache=/home/username/.npm --prefer-offline=false --prefer-online=false --offline=false --no-progress --no-save --no-audit --include=dev --include=peer --include=optional --no-package-lock-only --no-dry-run
npm ERR! npm WARN using --force Recommended protections disabled.
npm ERR! npm WARN old lockfile 
npm ERR! npm WARN old lockfile The package-lock.json file was created with an old version of npm,
npm ERR! npm WARN old lockfile so supplemental metadata must be fetched from the registry.
npm ERR! npm WARN old lockfile 
npm ERR! npm WARN old lockfile This is a one-time fix-up, please be patient...
npm ERR! npm WARN old lockfile 
npm ERR! npm WARN deprecated <many many warnings...>
npm ERR! npm ERR! code 1
npm ERR! npm ERR! path /home/username/.npm/_cacache/tmp/git-clonebeOztg/node_modules/node-sass
npm ERR! npm ERR! command failed
npm ERR! npm ERR! command sh -c node scripts/build.js
npm ERR! npm ERR! Building: /usr/bin/node /home/username/.npm/_cacache/tmp/git-clonebeOztg/node_modules/node-gyp/bin/node-gyp.js rebuild --verbose --libsass_ext= --libsass_cflags= --libsass_ldflags= --libsass_library=
npm ERR! npm ERR! gyp info it worked if it ends with ok
npm ERR! npm ERR! gyp verb cli [
npm ERR! npm ERR! gyp verb cli   '/usr/bin/node',
npm ERR! npm ERR! gyp verb cli   '/home/username/.npm/_cacache/tmp/git-clonebeOztg/node_modules/node-gyp/bin/node-gyp.js',
npm ERR! npm ERR! gyp verb cli   'rebuild',
npm ERR! npm ERR! gyp verb cli   '--verbose',
npm ERR! npm ERR! gyp verb cli   '--libsass_ext=',
npm ERR! npm ERR! gyp verb cli   '--libsass_cflags=',
npm ERR! npm ERR! gyp verb cli   '--libsass_ldflags=',
npm ERR! npm ERR! gyp verb cli   '--libsass_library='
npm ERR! npm ERR! gyp verb cli ]
npm ERR! npm ERR! gyp info using [email protected]
npm ERR! npm ERR! gyp info using [email protected] | linux | x64
npm ERR! npm ERR! gyp verb command rebuild []
npm ERR! npm ERR! gyp verb command clean []
npm ERR! npm ERR! gyp verb clean removing "build" directory
npm ERR! npm ERR! gyp verb command configure []
npm ERR! npm ERR! gyp verb check python checking for Python executable "python2" in the PATH
npm ERR! npm ERR! gyp verb `which` failed Error: not found: python2
npm ERR! npm ERR! gyp verb `which` failed     at getNotFoundError (/home/username/.npm/_cacache/tmp/git-clonebeOztg/node_modules/node-gyp/node_modules/which/which.js:13:12)
npm ERR! npm ERR! gyp verb `which` failed     at F (/home/username/.npm/_cacache/tmp/git-clonebeOztg/node_modules/node-gyp/node_modules/which/which.js:68:19)
npm ERR! npm ERR! gyp verb `which` failed     at E (/home/username/.npm/_cacache/tmp/git-clonebeOztg/node_modules/node-gyp/node_modules/which/which.js:80:29)
npm ERR! npm ERR! gyp verb `which` failed     at /home/username/.npm/_cacache/tmp/git-clonebeOztg/node_modules/node-gyp/node_modules/which/which.js:89:16
npm ERR! npm ERR! gyp verb `which` failed     at /home/username/.npm/_cacache/tmp/git-clonebeOztg/node_modules/isexe/index.js:42:5
npm ERR! npm ERR! gyp verb `which` failed     at /home/username/.npm/_cacache/tmp/git-clonebeOztg/node_modules/isexe/mode.js:8:5
npm ERR! npm ERR! gyp verb `which` failed     at FSReqCallback.oncomplete (node:fs:198:21)
npm ERR! npm ERR! gyp verb `which` failed  python2 Error: not found: python2
npm ERR! npm ERR! gyp verb `which` failed     at getNotFoundError (/home/username/.npm/_cacache/tmp/git-clonebeOztg/node_modules/node-gyp/node_modules/which/which.js:13:12)
npm ERR! npm ERR! gyp verb `which` failed     at F (/home/username/.npm/_cacache/tmp/git-clonebeOztg/node_modules/node-gyp/node_modules/which/which.js:68:19)
npm ERR! npm ERR! gyp verb `which` failed     at E (/home/username/.npm/_cacache/tmp/git-clonebeOztg/node_modules/node-gyp/node_modules/which/which.js:80:29)
npm ERR! npm ERR! gyp verb `which` failed     at /home/username/.npm/_cacache/tmp/git-clonebeOztg/node_modules/node-gyp/node_modules/which/which.js:89:16
npm ERR! npm ERR! gyp verb `which` failed     at /home/username/.npm/_cacache/tmp/git-clonebeOztg/node_modules/isexe/index.js:42:5
npm ERR! npm ERR! gyp verb `which` failed     at /home/username/.npm/_cacache/tmp/git-clonebeOztg/node_modules/isexe/mode.js:8:5
npm ERR! npm ERR! gyp verb `which` failed     at FSReqCallback.oncomplete (node:fs:198:21) {
npm ERR! npm ERR! gyp verb `which` failed   code: 'ENOENT'
npm ERR! npm ERR! gyp verb `which` failed }
npm ERR! npm ERR! gyp verb check python checking for Python executable "python" in the PATH
npm ERR! npm ERR! gyp verb `which` succeeded python /usr/bin/python
npm ERR! npm ERR! gyp ERR! configure error 
npm ERR! npm ERR! gyp ERR! stack Error: Command failed: /usr/bin/python -c import sys; print "%s.%s.%s" % sys.version_info[:3];
npm ERR! npm ERR! gyp ERR! stack   File "<string>", line 1
npm ERR! npm ERR! gyp ERR! stack     import sys; print "%s.%s.%s" % sys.version_info[:3];
npm ERR! npm ERR! gyp ERR! stack                       ^
npm ERR! npm ERR! gyp ERR! stack SyntaxError: invalid syntax
npm ERR! npm ERR! gyp ERR! stack 
npm ERR! npm ERR! gyp ERR! stack     at ChildProcess.exithandler (node:child_process:399:12)
npm ERR! npm ERR! gyp ERR! stack     at ChildProcess.emit (node:events:520:28)
npm ERR! npm ERR! gyp ERR! stack     at maybeClose (node:internal/child_process:1092:16)
npm ERR! npm ERR! gyp ERR! stack     at Process.ChildProcess._handle.onexit (node:internal/child_process:302:5)
npm ERR! npm ERR! gyp ERR! System Linux 5.15.0-18-generic
npm ERR! npm ERR! gyp ERR! command "/usr/bin/node" "/home/username/.npm/_cacache/tmp/git-clonebeOztg/node_modules/node-gyp/bin/node-gyp.js" "rebuild" "--verbose" "--libsass_ext=" "--libsass_cflags=" "--libsass_ldflags=" "--libsass_library="
npm ERR! npm ERR! gyp ERR! cwd /home/username/.npm/_cacache/tmp/git-clonebeOztg/node_modules/node-sass
npm ERR! npm ERR! gyp ERR! node -v v16.14.0
npm ERR! npm ERR! gyp ERR! node-gyp -v v3.8.0
npm ERR! npm ERR! gyp ERR! not ok 
npm ERR! npm ERR! Build failed with error code: 1

Especially, this line is not a valid Python3.x synthax: import sys; print "%s.%s.%s" % sys.version_info[:3]; so even faking a symlink called 'python' or 'python2' which points to -> '/usr/bin/python3.9' on the system doesn't help, naturally.

npm cache clean --force doesn't help either.

System info:

$ npm --version
8.3.1
$ node --version
v16.14.0
$ uname -mor
5.15.0-18-generic x86_64 GNU/Linux

Any hints on what I can do to fix this error?

Upvotes: 8

Views: 31936

Answers (1)

Alexei Zababurin
Alexei Zababurin

Reputation: 957

I faced with similar issue and solve it without installing Payton at all. Probably this way help you.

sass-loader requires you to install either Dart Sass or Node-Sass. I used Node-Sass, and installed it manually before launching npm install.

Thus my steps:

  1. remove node_modules
  2. remove package-lock.json (optionally)
  3. npm install node-sass@
  4. npm install

Take into account a couple of points:

  • node-sass version have to be corresponded with Node.js version. Below is a quick guide for minimum and maximum supported versions of node-sass:

    NodeJS Supported node-sass version Node Module
    Node 16 6.0+ 93
    Node 15 5.0+ 88
    Node 14 4.14+ 83
    Node 13 4.13+, <5.0 79
    Node 12 4.12+ 72
    Node 11 4.10+, <5.0 67
    Node 10 4.9+, <6.0 64
    Node 8 4.5.3+, <5.0 57
    Node <8 <5.0 <57
  • Currently Node Sass is deprecated so I'd recommend to use Dart Sass.

And it worths to be mentioned that easy way to fast changing version of nodejs is use nvm

Upvotes: 8

Related Questions