Node-gyp: TypeError: '>=' not supported between instances of 'tuple' and 'str'

Created on 13 Oct 2019  路  32Comments  路  Source: nodejs/node-gyp

  • Node Version: node v10.15.3 npm 6.4.1
  • Platform: Darwin AdamsVoBookPro3 19.0.0 Darwin Kernel Version 19.0.0: Wed Sep 25 20:18:50 PDT 2019; root:xnu-6153.11.26~2/RELEASE_X86_64 x86_64
  • Compiler:
    ```Apple clang version 11.0.0 (clang-1100.0.33.8)
    Target: x86_64-apple-darwin19.0.0
    Thread model: posix
    InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
* **Module**: `electron-rebuild`

<details><summary>Verbose output (from npm or node-gyp):</summary>

An unhandled error occurred inside electron-rebuild
Traceback (most recent call last):
File "/Users/adam/Projects/Personal/insomnia/packages/insomnia-app/node_modules/node-gyp/gyp/gyp_main.py", line 50, in
sys.exit(gyp.script_main())
File "/Users/adam/Projects/Personal/insomnia/packages/insomnia-app/node_modules/node-gyp/gyp/pylib/gyp/__init__.py", line 554, in script_main
return main(sys.argv[1:])
File "/Users/adam/Projects/Personal/insomnia/packages/insomnia-app/node_modules/node-gyp/gyp/pylib/gyp/__init__.py", line 547, in main
return gyp_main(args)
File "/Users/adam/Projects/Personal/insomnia/packages/insomnia-app/node_modules/node-gyp/gyp/pylib/gyp/__init__.py", line 532, in gyp_main
generator.GenerateOutput(flat_list, targets, data, params)
File "/Users/adam/Projects/Personal/insomnia/packages/insomnia-app/node_modules/node-gyp/gyp/pylib/gyp/generator/make.py", line 2215, in GenerateOutput
part_of_all=qualified_target in needed_targets)
File "/Users/adam/Projects/Personal/insomnia/packages/insomnia-app/node_modules/node-gyp/gyp/pylib/gyp/generator/make.py", line 802, in Write
self.WriteCopies(spec['copies'], extra_outputs, part_of_all)
File "/Users/adam/Projects/Personal/insomnia/packages/insomnia-app/node_modules/node-gyp/gyp/pylib/gyp/generator/make.py", line 1145, in WriteCopies
env = self.GetSortedXcodeEnv()
File "/Users/adam/Projects/Personal/insomnia/packages/insomnia-app/node_modules/node-gyp/gyp/pylib/gyp/generator/make.py", line 1885, in GetSortedXcodeEnv
additional_settings)
File "/Users/adam/Projects/Personal/insomnia/packages/insomnia-app/node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py", line 1618, in GetSortedXcodeEnv
additional_settings)
File "/Users/adam/Projects/Personal/insomnia/packages/insomnia-app/node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py", line 1529, in _GetXcodeEnv
if XcodeVersion() >= '0500' and not env.get('SDKROOT'):
TypeError: '>=' not supported between instances of 'tuple' and 'str'
gyp ERR! configure error
gyp ERR! stack Error: gyp failed with exit code: 1
gyp ERR! stack at ChildProcess.onCpExit (/Users/adam/Projects/Personal/insomnia/packages/insomnia-app/node_modules/node-gyp/lib/configure.js:351:16)
gyp ERR! stack at ChildProcess.emit (events.js:189:13)
gyp ERR! stack at Process.ChildProcess._handle.onexit (internal/child_process.js:248:12)
gyp ERR! System Darwin 19.0.0
gyp ERR! command "/Users/adam/.nvm/versions/node/v10.15.3/bin/node" "/Users/adam/Projects/Personal/insomnia/packages/insomnia-app/node_modules/.bin/node-gyp" "rebuild" "--target=3.1.13" "--arch=x64" "--dist-url=https://electronjs.org/headers" "--build-from-source" "--module_name=node_libcurl" "--module_path=/Users/adam/Projects/Personal/insomnia/packages/insomnia-libcurl/node_modules/insomnia-node-libcurl/lib/binding" "--host=https://github.com/JCMais/node-libcurl/releases/download" "--remote_path=./v2.0.0-alpha.0-1/"
gyp ERR! cwd /Users/adam/Projects/Personal/insomnia/packages/insomnia-libcurl/node_modules/insomnia-node-libcurl
gyp ERR! node -v v10.15.3
gyp ERR! node-gyp -v v5.0.5
gyp ERR! not ok

Failed with exit code: 1

</details>

<!-- Any further details -->

If I update the comparison on the line [here](https://github.com/nodejs/node-gyp/blob/cc8b2fa83e8cf02beb27c390b4dcfb7564becac0/gyp/pylib/gyp/xcode_emulation.py#L1494) to the following, it works:

xcode_version, _ = XcodeVersion()

if xcode_version >= '0500' and not env.get('SDKROOT'):
```

However, I'm not sure if it's supposed to work like that or not.

Python macOS

Most helpful comment

A workaround that worked for me was running:

npm explore npm -g -- npm install node-gyp@latest
npm explore npm -g -- npm explore npm-lifecycle -- npm install node-gyp@latest

Found out about this here:
https://github.com/nodejs/node-gyp/wiki/Updating-npm's-bundled-node-gyp

All 32 comments

This was fixed in the last few weeks... Can you please try with a more current release?

That comparison is still in the master branch. So I don鈥檛 understand how it could have been fixed.

Yes but the line that you changed is line 1494 but the traceback above is complaining about line 1529 which does not contain the code in question: https://github.com/nodejs/node-gyp/blob/master/gyp/pylib/gyp/xcode_emulation.py#L1529

@sam-github My sense is that this relates to gyp roundtrip but it is not yet clear.

In the traceback node-gyp v5.0.5 is being used but the line number still looks off (although much closer to the code in question): https://github.com/nodejs/node-gyp/blob/v5.0.5/gyp/pylib/gyp/xcode_emulation.py#L1529

Got the same error, but with the correct line number:

Traceback (most recent call last):
  File "/usr/local/lib/node_modules/npm/node_modules/node-gyp/gyp/gyp_main.py", line 50, in <module>
    sys.exit(gyp.script_main())
  File "/usr/local/lib/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/__init__.py", line 554, in script_main
    return main(sys.argv[1:])
  File "/usr/local/lib/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/__init__.py", line 547, in main
    return gyp_main(args)
  File "/usr/local/lib/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/__init__.py", line 532, in gyp_main
    generator.GenerateOutput(flat_list, targets, data, params)
  File "/usr/local/lib/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/make.py", line 2215, in GenerateOutput
    part_of_all=qualified_target in needed_targets)
  File "/usr/local/lib/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/make.py", line 794, in Write
    extra_mac_bundle_resources, part_of_all)
  File "/usr/local/lib/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/make.py", line 900, in WriteActions
    env = self.GetSortedXcodeEnv()
  File "/usr/local/lib/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/make.py", line 1885, in GetSortedXcodeEnv
    additional_settings)
  File "/usr/local/lib/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py", line 1616, in GetSortedXcodeEnv
    additional_settings)
  File "/usr/local/lib/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py", line 1527, in _GetXcodeEnv
    if XcodeVersion() >= '0500' and not env.get('SDKROOT'):
TypeError: '>=' not supported between instances of 'tuple' and 'str'
gyp ERR! configure error
gyp ERR! stack Error: `gyp` failed with exit code: 1
gyp ERR! stack     at ChildProcess.onCpExit (/usr/local/lib/node_modules/npm/node_modules/node-gyp/lib/configure.js:351:16)
gyp ERR! stack     at ChildProcess.emit (events.js:198:13)
gyp ERR! stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:248:12)
gyp ERR! System Darwin 18.7.0
gyp ERR! command "/usr/local/Cellar/node@10/10.16.3/bin/node" "/usr/local/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild"
gyp ERR! cwd /Users/awagner/mozilla/web-ext/node_modules/dtrace-provider
gyp ERR! node -v v10.16.3
gyp ERR! node-gyp -v v5.0.5
gyp ERR! not ok

Hi. I have the same error after I updated xCode to the newest version(if it helps).

@MusicalEcho What does your traceback say for the following lines?

gyp ERR! System Darwin 18.7.0
gyp ERR! command "/usr/local/Cellar/node@10/10.16.3/bin/node" "/usr/local/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild"
gyp ERR! cwd /Users/awagner/mozilla/web-ext/node_modules/dtrace-provider
gyp ERR! node -v v10.16.3
gyp ERR! node-gyp -v v5.0.5
gyp ERR! not ok

Another package, but yep everything else is the same

$ sw_vers ; /usr/sbin/pkgutil --packages | grep CL

ProductName:    Mac OS X
ProductVersion: 10.14.6
BuildVersion:   18G87
com.apple.pkg.CLTools_Executables
com.apple.pkg.CLTools_SDK_macOSSDK
com.apple.pkg.CLTools_SDK_macOS1013
com.apple.pkg.CLTools_SDK_macOS1014
ProductName:    Mac OS X
ProductVersion: 10.13.6
BuildVersion:   17G6030
com.apple.pkg.CLTools_Executables
com.apple.pkg.CLTools_SDK_macOSSDK
com.apple.pkg.CLTools_SDK_macOS1013
com.apple.pkg.CLTools_SDK_macOS1014

Resolve with updating node and : npm install grpc@latest

Resolve with updating node and : npm install grpc@latest

I updated node to 12.13.1 and have the latest packages - nothing changed

I'm also seeing this error today.

ProductName:    Mac OS X
ProductVersion: 10.14.6
BuildVersion:   18G1012
com.apple.pkg.CLTools_Executables
com.apple.pkg.CLTools_SDK_macOSSDK
com.apple.pkg.CLTools_SDK_macOS1013
com.apple.pkg.CLTools_SDK_macOS1014
MacBook-Pro:node jesse$ python --version
Python 3.6.8
MacBook-Pro:node jesse$ npm -v
6.12.0
MacBook-Pro:node jesse$ node -v
v12.13.0

What is the recommended fix since this issue is closed?

I'm also seeing this error. What is the recommended fix?

ProductName:    Mac OS X
ProductVersion: 10.14.6
BuildVersion:   18G95
com.apple.pkg.CLTools_Executables
com.apple.pkg.CLTools_SDK_macOSSDK
com.apple.pkg.CLTools_SDK_macOS1013
com.apple.pkg.CLTools_SDK_macOS1014
python --version
Python 3.7.3
npm -v
6.12.1
node -v
v12.13.0

Anyone know when this will get integrated into NPM? It seems like NPM is still using v5.0.5 of node-gyp, and I don't seem to be able to find any pull requests for updating node-gyp. I'm unable to install a package right now because NPM is using a broken node-gyp.

Not to detract from the 6.0.1 conversation, because I think that is a good question, but just a quick FYI:

I think node-gyp is mostly needed when building modules from source. Most of the time there should be a binary package available for a given node module in your environment.

In my case, on a mac, node-gyp was trying to build fsevents 1.2.6 or something, because it was an optional child dependency of a dependency ( babel-cli in my case ). fsevents 1.2.9 is the first version compatible with node 12, so npm was failing to find a binary package.

I resolved this issue locally by adding the following to my package.json:

"optionalDependencies": {
    "fsevents": "^1.2.9"
  },

This allowed the binary package for fsevents 1.2.9 to be installed and eliminated the need for node-gyp.

Again, this shouldn't detract from the node-gyp issue, because it's still an issue. Just sayin there may be a quick workaround available for many folks.

My issue is actually with detect-character-encoding, which I added to a couple of command-line tools I have in NPM. I've reverted to the previous version of my tools that doesn't use it while I wait for NPM to update the node-gyp dependency to fix my issue. It seemed to be an issue on all of the node versions I tried to install it on (8, 10, 12, 13).

Note that when I was implementing the tool changes, I used yarn, but I use NPM for installing packages globally. It worked without any issues in yarn, so I was rather surprised when the global NPM installs failed.

The last three comments do not pertain to this issue. Perhaps find the right repo to open a new issue on.

Anyone know when this will get integrated into NPM?

Wrong repo. Check out https://github.com/npm/cli/pull/276#issuecomment-549654698

Sorry about that. I wasn't finding anything on NPM and wasn't sure where to post since they don't have an issues tab and I wasn't too sure about joining the forum just to ask a single question, so I ended up posting here since it was related to the error I was getting. Thanks for bringing the topic up on the NPM repo for me.

A workaround that worked for me was running:

npm explore npm -g -- npm install node-gyp@latest
npm explore npm -g -- npm explore npm-lifecycle -- npm install node-gyp@latest

Found out about this here:
https://github.com/nodejs/node-gyp/wiki/Updating-npm's-bundled-node-gyp

A workaround that worked for me was running:

npm explore npm -g -- npm install node-gyp@latest
npm explore npm -g -- npm explore npm-lifecycle -- npm install node-gyp@latest

Found out about this here:
https://github.com/nodejs/node-gyp/wiki/Updating-npm's-bundled-node-gyp

work like a charm

A workaround that worked for me was running:

npm explore npm -g -- npm install node-gyp@latest
npm explore npm -g -- npm explore npm-lifecycle -- npm install node-gyp@latest

Found out about this here:
https://github.com/nodejs/node-gyp/wiki/Updating-npm's-bundled-node-gyp

It worked for me as well! 馃憤

The corresponding issue to get the version bundled with npm updated seems to be this: npm/cli#287

Addressing the contention that this is because npm is shipping node-gyp 6 rather than 5:

node-gyp v6 should be almost the same as node-gyp v5, if someone _still_ experiencing this issue can demonstrate a difference between v5 and v6 that's causing it then we'll fix v5 and ship it.

On master:

$ git diff v5.x -- gyp/
$

The diff between the two consists primarily of switching the preference order between Python 2 and 3 such that node-gyp 6 prefers the latter and 5 the former, we consider that "breaking" change. In fact, a diff between the two branches, excluding tests and docs, reveals mainly Python version checking changes and #1978 which is an unrelated feature yet to be included in a 5.x.

Perhaps there's a Python 3 problem here and you're experiencing it because your system has both and it's opting for 2 with node-gyp 5 but is fixed when it opts for 3. You could test that by switching to Python 3 using node-gyp 5 (current npm version): https://github.com/nodejs/node-gyp#configuring-python-dependency

If this is still broken, help us fix it, we are still maintaining v5.x but none of us are getting this problem on our own systems.

@rvagg Here is something.

On my MacOS system we use pyenv for our python stuff; our source repo requires python 3.6.7. My pyenv setup means Python 3.6.7 is the runtime python version in the installing user's path.

With this python as my default python version, I get what's described here: https://github.com/ranisalt/node-argon2/issues/230 and what's described in this issue (>= tuple str...)

If I temporarily disable this and use the MacOS system 2.7 python - the build succeeds. I was not expecting this.

I am surprised by this. v3 should work with v5.0.5 since it's a supported version, shouldn't it?

In our situation, this is a breaker- we can't simply downgrade to python 2 for this one build nor do we want to mandate to the consumers of our source code that they have to manually configure node-gyp to use python2. I'd say this is a bug with v5.0.5 with python3...

1939 Landed in 5.0.6 so please refrain from using earlier releases on macOS.

Thanks for mentioning the release numnber @cclauss . Too bad upstream npm is still using 5.0.5 which is what everyone has. Is there any coordination with the NPM CLI team on bumping minor revs?

They've even had a release since 5.0.6 came out. :(

see with the following issue #278

Was this page helpful?
0 / 5 - 0 ratings

Related issues

Flimm picture Flimm  路  3Comments

jplatte picture jplatte  路  3Comments

jlchereau picture jlchereau  路  3Comments

chen4393 picture chen4393  路  3Comments

lopezdp picture lopezdp  路  3Comments