問題
npm i
を叩くと以下のようなエラーに遭遇
npm WARN deprecated @npmcli/move-file@1.1.2: This functionality has been moved to @npmcli/fs npm WARN deprecated stringify-package@1.0.1: This module is not used anymore, and has been replaced by @npmcli/package-json npm ERR! code 1 npm ERR! path E:\test\electron-acrylic-window\node_modules\@seorii\win32-displayconfig npm ERR! command failed npm ERR! command C:\Windows\system32\cmd.exe /d /s /c npm run rebuild npm ERR! > @seorii/win32-displayconfig@0.1.1 rebuild npm ERR! > node-gyp rebuild npm ERR! gyp info it worked if it ends with ok npm ERR! gyp info using node-gyp@8.4.1 npm ERR! gyp info using node@20.10.0 | win32 | x64 npm ERR! gyp info find Python using Python version 3.12.0 found at "C:\Users\Aptyp\AppData\Local\Programs\Python\Python312\python.exe" npm ERR! gyp info find VS using VS2022 (17.6.33829.357) found at: npm ERR! gyp info find VS "C:\Program Files\Microsoft Visual Studio\2022\Community" npm ERR! gyp info find VS run with --verbose for detailed information npm ERR! gyp info spawn C:\Users\Aptyp\AppData\Local\Programs\Python\Python312\python.exe npm ERR! gyp info spawn args [ npm ERR! gyp info spawn args 'E:\\test\\electron-acrylic-window\\node_modules\\node-gyp\\gyp\\gyp_main.py', npm ERR! gyp info spawn args 'binding.gyp', npm ERR! gyp info spawn args '-f', npm ERR! gyp info spawn args 'msvs', npm ERR! gyp info spawn args '-I', npm ERR! gyp info spawn args 'E:\\test\\electron-acrylic-window\\node_modules\\@seorii\\win32-displayconfig\\build\\config.gypi', npm ERR! gyp info spawn args '-I', npm ERR! gyp info spawn args 'E:\\test\\electron-acrylic-window\\node_modules\\node-gyp\\addon.gypi', npm ERR! gyp info spawn args '-I', npm ERR! gyp info spawn args 'C:\\Users\\Aptyp\\AppData\\Local\\node-gyp\\Cache\\20.10.0\\include\\node\\common.gypi', npm ERR! gyp info spawn args '-Dlibrary=shared_library', npm ERR! gyp info spawn args '-Dvisibility=default', npm ERR! gyp info spawn args '-Dnode_root_dir=C:\\Users\\Aptyp\\AppData\\Local\\node-gyp\\Cache\\20.10.0', npm ERR! gyp info spawn args '-Dnode_gyp_dir=E:\\test\\electron-acrylic-window\\node_modules\\node-gyp', npm ERR! gyp info spawn args '-Dnode_lib_file=C:\\\\Users\\\\Aptyp\\\\AppData\\\\Local\\\\node-gyp\\\\Cache\\\\20.10.0\\\\<(target_arch)\\\\node.lib', npm ERR! gyp info spawn args '-Dmodule_root_dir=E:\\test\\electron-acrylic-window\\node_modules\\@seorii\\win32-displayconfig', npm ERR! gyp info spawn args '-Dnode_engine=v8', npm ERR! gyp info spawn args '--depth=.', npm ERR! gyp info spawn args '--no-parallel', npm ERR! gyp info spawn args '--generator-output', npm ERR! gyp info spawn args 'E:\\test\\electron-acrylic-window\\node_modules\\@seorii\\win32-displayconfig\\build', npm ERR! gyp info spawn args '-Goutput_dir=.' npm ERR! gyp info spawn args ] npm ERR! Traceback (most recent call last): npm ERR! File "E:\test\electron-acrylic-window\node_modules\node-gyp\gyp\gyp_main.py", line 42, in <module> npm ERR! import gyp # noqa: E402 npm ERR! ^^^^^^^^^^ npm ERR! File "E:\test\electron-acrylic-window\node_modules\node-gyp\gyp\pylib\gyp\__init__.py", line 9, in <module> npm ERR! import gyp.input npm ERR! File "E:\test\electron-acrylic-window\node_modules\node-gyp\gyp\pylib\gyp\input.py", line 19, in <module> npm ERR! from distutils.version import StrictVersion npm ERR! ModuleNotFoundError: No module named 'distutils' npm ERR! gyp ERR! configure error npm ERR! gyp ERR! stack Error: `gyp` failed with exit code: 1 npm ERR! gyp ERR! stack at ChildProcess.onCpExit (E:\test\electron-acrylic-window\node_modules\node-gyp\lib\configure.js:259:16) npm ERR! gyp ERR! stack at ChildProcess.emit (node:events:514:28) npm ERR! gyp ERR! stack at ChildProcess._handle.onexit (node:internal/child_process:294:12) npm ERR! gyp ERR! System Windows_NT 10.0.22000 npm ERR! gyp ERR! command "C:\\Program Files\\nodejs\\node.exe" "E:\\test\\electron-acrylic-window\\node_modules\\node-gyp\\bin\\node-gyp.js" "rebuild" npm ERR! gyp ERR! cwd E:\test\electron-acrylic-window\node_modules\@seorii\win32-displayconfig npm ERR! gyp ERR! node -v v20.10.0 npm ERR! gyp ERR! node-gyp -v v8.4.1 npm ERR! gyp ERR! not ok
どうやら、
ModuleNotFoundError: No module named 'distutils'
が問題っぽい。
生じた環境は、
- python 3.12
- npm 10系
- node 21系
です。
原因
根本的な問題は、 distutilsがpython3.12系では削除されたためだそうです。
解決策
解決策1
pip install setuptool
でだそうです。
筆者は、これでは解決しなかったです。
解決策2
virtualenv
を使う方法もあるようです。
pip install virtualenv virtualenv -p python3.10 venv source venv/bin/activate
解決策3
pythonのダウングレードが最も早いです。マストな要件がないのであれば、ダウングレードしてしまいましょう。
筆者はこれで解決しました。
なお、nodeが21系だと、node-saasで失敗するので、nodeも16系にダウングレードしました。