rebuild icon indicating copy to clipboard operation
rebuild copied to clipboard

need to upgrade node-gyp

Open soroushm opened this issue 1 year ago • 7 comments

distutils has been removed in Python v3.12. we need to upgrade version of node-gyp (to v10+)

› Traceback (most recent call last):
  File "xxxxx\node_modules\@electron\rebuild\node_modules\node-gyp\gyp\gyp_main.py", line 42, in <module>
  import gyp  # noqa: E402
  ^^^^^^^^^^
  File "xxxxxx\node_modules\@electron\rebuild\node_modules\node-gyp\gyp\pylib\gyp\__init__.py", line 9, in <mod…
  import gyp.input
  File "xxxxx\node_modules\@electron\rebuild\node_modules\node-gyp\gyp\pylib\gyp\input.py", line 19, in <modul…
  from distutils.version import StrictVersion
  ModuleNotFoundError: No module named 'distutils'
  Error: `gyp` failed with exit code: 1
      at ChildProcess.onCpExit (xxxx\node_modules\@electron\rebuild\n…

An unhandled rejection has occurred inside Forge:
Error: node-gyp failed to rebuild 'xxxxx2\node_modules\robotjs'
at ChildProcess.<anonymous> (xxxxx\node_modules\@electron\rebuild\lib\module-type\node-gyp\node-gyp.js:118:24)
    at ChildProcess.emit (node:events:537:28)
    at ChildProcess._handle.onexit (node:internal/child_process:291:12)

soroushm avatar Nov 26 '23 12:11 soroushm

can confirm same issue, a temp fix is to include the latest node-gyp as a devDependency in YOUR package.json npm install node-gyp --save-dev should install 10.0.1

si458 avatar Dec 08 '23 11:12 si458

Hi, I'm struggling to get electron-rebuild to work due to node-gyp version and Python version (as others reported above).

I've tried the so-called temp fix by adding the devDependency in my package.json to the latest node-gyp but it's not getting used by electron-rebuild.

Is there any other known workaround for this issue?

aquacode avatar Feb 14 '24 18:02 aquacode

As references in https://github.com/nodejs/node-gyp/issues/2869#issuecomment-1966234393, node-gyp v10+ solves this error; distutils was removed from python 3.12 as mentioned here, which causes this error.

A way to fix this is to add an overrides to your package.json.

In my case (using pnpm) on the highest level in my package.json:

  "pnpm": {
    "overrides": {
      "node-gyp": "^10.0.0"
    }
  },

Do this according to how your package manager handles overrides.

If your package manager does not update correctly, check your lock file and confirm @electron/rebuild has the depency node-gyp set to some 10+ version, at the time of writing 10.0.1. If this is the case, try deleting your lockfile and have it re-generate with e.g. pnpm i or equivalent in your package manager.

For reference, with pnpm my relevant lockfile info looks like this:
  /@electron/[email protected]:
    resolution: {integrity: sha512-zF4x3QupRU3uNGaP5X1wjpmcjfw1H87kyqZ00Tc3HvriV+4gmOGuvQjGNkrJuXdsApssdNyVwLsy+TaeTGGcVw==}
    engines: {node: '>=12.13.0'}
    hasBin: true
    dependencies:
      '@malept/cross-spawn-promise': 2.0.0
      chalk: 4.1.2
      debug: 4.3.4
      detect-libc: 2.0.2
      fs-extra: 10.1.0
      got: 11.8.6
      node-abi: 3.56.0
      node-api-version: 0.2.0
      node-gyp: 10.0.1
      ora: 5.4.1
      read-binary-file-arch: 1.0.6
      semver: 7.6.0
      tar: 6.2.0
      yargs: 17.7.2
    transitivePeerDependencies:
      - supports-color
    dev: true

EDIT: I have been fiddling around with this a while before I came to this conclusion which is not enough to get it running, so the above will not work. I have edited the file node_modules\@electron\rebuild\lib\module-type\node-gyp\worker.js:29 to remove the promisify since v10 of node-gyp changes it's internals to return promises natively.

That is an integral part of the solution. I guess I'll see if I can cook up a PR to this project to resolve this issue.

tarekis avatar Mar 01 '24 20:03 tarekis

overrides didn't work for me, but this did:

pip install setuptools

or possibly

python3 -m pip install --break-system-packages setuptools

verhovsky avatar Mar 21 '24 22:03 verhovsky

can confirm same issue, a temp fix is to include the latest node-gyp as a devDependency in YOUR package.json npm install node-gyp --save-dev should install 10.0.1

thx for temp fix actually

Komodood avatar Apr 15 '24 11:04 Komodood

pip install setuptools

Thanks, this solutions worked for me on windows

buuhvprojects avatar May 05 '24 17:05 buuhvprojects

overrides didn't work for me, but this did:

pip install setuptools

or possibly

python3 -m pip install --break-system-packages setuptools

This works for me. Thanks @verhovsky

ec2-learn-instant avatar Sep 12 '24 12:09 ec2-learn-instant