91

I'm a NODE novice and trying to install and run https://github.com/DylanAkp/AirtagsAnywhere

I'm on a brand new M2 Mac with Python 3.12

Node 18.18 and NPM 9.8.1

And get a long stream. I understand the warnings but can't follow the errors.

Can anyone point me in the right direction?

npm ERR! code 1 npm ERR! path /Users/airtag/Desktop/AirtagsAnywhere/front_airtags/node_modules/node-sass npm ERR! command failed npm ERR! command sh -c node scripts/build.js npm ERR! Building: /usr/local/bin/node /Users/airtag/Desktop/AirtagsAnywhere/front_airtags/node_modules/node-gyp/bin/node-gyp.js rebuild --verbose --libsass_ext= --libsass_cflags= --libsass_ldflags= --libsass_library= npm ERR! gyp info it worked if it ends with ok npm ERR! gyp verb cli [ npm ERR! gyp verb cli '/usr/local/bin/node', npm ERR! gyp verb cli '/Users/airtag/Desktop/AirtagsAnywhere/front_airtags/node_modules/node-gyp/bin/node-gyp.js', npm ERR! gyp verb cli 'rebuild', npm ERR! gyp verb cli '--verbose', npm ERR! gyp verb cli '--libsass_ext=', npm ERR! gyp verb cli '--libsass_cflags=', npm ERR! gyp verb cli '--libsass_ldflags=', npm ERR! gyp verb cli '--libsass_library=' npm ERR! gyp verb cli ] npm ERR! gyp info using [email protected] npm ERR! gyp info using [email protected] | darwin | arm64 npm ERR! gyp verb command rebuild [] npm ERR! gyp verb command clean [] npm ERR! gyp verb clean removing "build" directory npm ERR! gyp verb command configure [] npm ERR! gyp verb find Python Python is not set from command line or npm configuration npm ERR! gyp verb find Python Python is not set from environment variable PYTHON npm ERR! gyp verb find Python checking if "python3" can be used npm ERR! gyp verb find Python - executing "python3" to get executable path npm ERR! gyp verb find Python - executable path is "/Library/Frameworks/Python.framework/Versions/3.12/bin/python3" npm ERR! gyp verb find Python - executing "/Library/Frameworks/Python.framework/Versions/3.12/bin/python3" to get version npm ERR! gyp verb find Python - version is "3.12.0" npm ERR! gyp info find Python using Python version 3.12.0 found at "/Library/Frameworks/Python.framework/Versions/3.12/bin/python3" npm ERR! gyp verb get node dir no --target version specified, falling back to host node version: 18.18.0 npm ERR! gyp verb command install [ '18.18.0' ] npm ERR! gyp verb install input version string "18.18.0" npm ERR! gyp verb install installing version: 18.18.0 npm ERR! gyp verb install --ensure was passed, so won't reinstall if already installed npm ERR! gyp verb install version is already installed, need to check "installVersion" npm ERR! gyp verb got "installVersion" 9 npm ERR! gyp verb needs "installVersion" 9 npm ERR! gyp verb install version is good npm ERR! gyp verb get node dir target node version installed: 18.18.0 npm ERR! gyp verb build dir attempting to create "build" dir: /Users/airtag/Desktop/AirtagsAnywhere/front_airtags/node_modules/node-sass/build npm ERR! gyp verb build dir "build" dir needed to be created? Yes npm ERR! gyp verb build/config.gypi creating config file npm ERR! gyp verb build/config.gypi writing out config file: /Users/airtag/Desktop/AirtagsAnywhere/front_airtags/node_modules/node-sass/build/config.gypi npm ERR! gyp verb config.gypi checking for gypi file: /Users/airtag/Desktop/AirtagsAnywhere/front_airtags/node_modules/node-sass/config.gypi npm ERR! gyp verb common.gypi checking for gypi file: /Users/airtag/Desktop/AirtagsAnywhere/front_airtags/node_modules/node-sass/common.gypi npm ERR! gyp verb gyp gyp format was not specified; forcing "make" npm ERR! gyp info spawn /Library/Frameworks/Python.framework/Versions/3.12/bin/python3 npm ERR! gyp info spawn args [ npm ERR! gyp info spawn args '/Users/airtag/Desktop/AirtagsAnywhere/front_airtags/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 'make', npm ERR! gyp info spawn args '-I', npm ERR! gyp info spawn args '/Users/airtag/Desktop/AirtagsAnywhere/front_airtags/node_modules/node-sass/build/config.gypi', npm ERR! gyp info spawn args '-I', npm ERR! gyp info spawn args '/Users/airtag/Desktop/AirtagsAnywhere/front_airtags/node_modules/node-gyp/addon.gypi', npm ERR! gyp info spawn args '-I', npm ERR! gyp info spawn args '/Users/airtag/Library/Caches/node-gyp/18.18.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=/Users/airtag/Library/Caches/node-gyp/18.18.0', npm ERR! gyp info spawn args '-Dnode_gyp_dir=/Users/airtag/Desktop/AirtagsAnywhere/front_airtags/node_modules/node-gyp', npm ERR! gyp info spawn args '-Dnode_lib_file=/Users/airtag/Library/Caches/node-gyp/18.18.0/<(target_arch)/node.lib', npm ERR! gyp info spawn args '-Dmodule_root_dir=/Users/airtag/Desktop/AirtagsAnywhere/front_airtags/node_modules/node-sass', 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 '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 "/Users/airtag/Desktop/AirtagsAnywhere/front_airtags/node_modules/node-gyp/gyp/gyp_main.py", line 42, in <module> npm ERR! import gyp # noqa: E402 npm ERR! ^^^^^^^^^^ npm ERR! File "/Users/airtag/Desktop/AirtagsAnywhere/front_airtags/node_modules/node-gyp/gyp/pylib/gyp/__init__.py", line 9, in <module> npm ERR! import gyp.input npm ERR! File "/Users/airtag/Desktop/AirtagsAnywhere/front_airtags/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 (/Users/airtag/Desktop/AirtagsAnywhere/front_airtags/node_modules/node-gyp/lib/configure.js:259:16) npm ERR! gyp ERR! stack at ChildProcess.emit (node:events:517:28) npm ERR! gyp ERR! stack at ChildProcess._handle.onexit (node:internal/child_process:292:12) npm ERR! gyp ERR! System Darwin 23.0.0 npm ERR! gyp ERR! command "/usr/local/bin/node" "/Users/airtag/Desktop/AirtagsAnywhere/front_airtags/node_modules/node-gyp/bin/node-gyp.js" "rebuild" "--verbose" "--libsass_ext=" "--libsass_cflags=" "--libsass_ldflags=" "--libsass_library=" npm ERR! gyp ERR! cwd /Users/airtag/Desktop/AirtagsAnywhere/front_airtags/node_modules/node-sass npm ERR! gyp ERR! node -v v18.18.0 npm ERR! gyp ERR! node-gyp -v v8.4.1 npm ERR! gyp ERR! not ok npm ERR! Build failed with error code: 1 npm ERR! A complete log of this run can be found in: /Users/airtag/.npm/_logs/2023-10-07T19_25_34_725Z-debug-0.log 
1

6 Answers 6

154

distutils module is used to install python packages for node gyp. This module usually installed as part of python installation.

In python v3.12, distutils module removed. This means your local doesn't have any tool in place to support python package installation for node gyp.

So when node gyp try to install python package using distutils that is not installed as part of python, the above issue happen.

To resolve this issue, I would suggest you to install recommended tool called setuptools for same purpose.

Run one of these commands:

  • python3 -m pip install setuptools ...or...
  • brew install python-setuptools (if you have homebrew installed)
Sign up to request clarification or add additional context in comments.

7 Comments

This worked for me. But what's the difference between python3 -m pip install setuptools and just pip install setuptools as suggested here?
Thank you very much, it works. You've saved me a lot of time.
this never worked for me, First off, I had to use a flag to override behavior since I didn't want to setup a virtual env. ``python3 -m pip install distutils --break-system-packages` But then it just kept saying ERROR: Could not find a version that satisfies the requirement distutils (from versions: none) ERROR: No matching distribution found for distutils had to go to use @Alexander Kondaurov's answer
If you've installed Python via brew, scroll down to stackoverflow.com/a/78257393/138023
|
37

If you installed Python via Homebrew use next command:

brew install python-setuptools 

https://formulae.brew.sh/formula/python-setuptools

Comments

16

I solved it, I'm a mac user:

disutils is not supported anymore starting from python3.12

install python 3.11

brew install [email protected]

setup environment variable in .zshrc

export PYTHON=3.11

now you use [email protected] by default

1 Comment

a savior. although export PYTHON=3.11 didn't set python version for me, I used export npm_config_python=/opt/homebrew/bin/python3.11
2

For Windows

Check your python version python --version then check your pip version pip --version and if they both look good run pip install setuptools

You should have something like this:

C:\project-path> python --version Python 3.12.3 C:\project-path> pip --version pip 24.0 from C:\Python312\Lib\site-packages\pip (python 3.12) C:\project-path> pip install setuptools Collecting setuptools Downloading setuptools-69.5.1-py3-none-any.whl.metadata (6.2 kB) Downloading setuptools-69.5.1-py3-none-any.whl (894 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 894.6/894.6 kB 2.3 MB/s eta 0:00:00 Installing collected packages: setuptools Successfully installed setuptools-69.5.1 C:\project-path> 

After than you can run npm i with no problems.

Comments

1

Here's the relevant part of the message:

"from distutils.version import StrictVersion npm ERR! ModuleNotFoundError: No module named 'distutils' npm"

distutils has been removed from Python 3.12. either roll back to Python 3.11.x or open a ticket against the package and have the build process fixed.

Comments

0

npm ERR! gyp info using [email protected]

Please read the installation section of node-gyp's README.md

https://github.com/nodejs/node-gyp?tab=readme-ov-file#installation says

[!Important]

Python >= v3.12 requires node-gyp >= v10

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.