electron / rebuild

Package to rebuild native Node.js modules against the currently installed Electron version
MIT License
1.03k stars 175 forks source link

need to upgrade node-gyp #1116

Closed soroushm closed 1 month ago

soroushm commented 11 months ago

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)
si458 commented 11 months ago

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

aquacode commented 9 months ago

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?

tarekis commented 8 months ago

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/rebuild@3.6.0: 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.

verhovsky commented 8 months ago

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

pip install setuptools

or possibly

python3 -m pip install --break-system-packages setuptools
Komodood commented 7 months ago

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

buuhvprojects commented 6 months ago
pip install setuptools

Thanks, this solutions worked for me on windows

ec2-learn-instant commented 2 months ago

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

rotu commented 1 month ago

What's the status on this? It looks like #1128 and #1152 are both proposed fixes.

continuous-auth[bot] commented 1 month ago

:tada: This issue has been resolved in version 3.7.0 :tada:

The release is available on:

Your semantic-release bot :package::rocket: