question-mark
Stuck on an issue?

Lightrun Answers was designed to reduce the constant googling that comes with debugging 3rd party libraries. It collects links to all the places you might be looking at while hunting down a tough bug.

And, if you’re still stuck at the end, we’re happy to hop on a call to see how we can help out.

Installation fails on Node.js 14 due to obsolete "keytar" dependency

See original GitHub issue
  • Package Name: @azure/identity
  • Package Version: 1.2.2
  • Operating system: Windows
  • nodejs
    • version: 14.15.3

Describe the bug

The @azure/identity has this problematic dependency:

https://github.com/Azure/azure-sdk-for-js/blob/14ed4e758d5baef263a0bda1b0549cad12f9c647/sdk/identity/identity/package.json#L97-L99

To Reproduce

We originally encountered this with the Rush tool, because it recently picked up a dependency on @azure/identity. The downstream bug is here: https://github.com/microsoft/rushstack/issues/2467

Steps to reproduce the behavior:

  1. Start with a Windows machine that does not have Python or a C++ compiler.

  2. Use nvm-windows to select Node.js 14.15.3 (the current LTS release):

    C:\> nvm install 14.15.3
    C:\> nvm use 14.15.3
    
  3. Now try to install Rush:

    C:\> npm install --global @microsoft/rush
    

Expected result: It should install without problems.

Actual result: The installation fails:

> keytar@5.6.0 install C:\Program 
Files\nodejs\node_modules\@microsoft\rush\node_modules\keytar > prebuild-install 
|| node-gyp rebuild

prebuild-install WARN install No prebuilt binaries found (target=14.15.3 
runtime=node arch=x64 libc= platform=win32)

C:\Program Files\nodejs\node_modules\@microsoft\rush\node_modules\keytar>if not 
defined npm_config_node_gyp (node 
"C:\Users\Owner\AppData\Roaming\nvm\v14.15.3\node_modules\npm\node_modules\npm-
lifecycle\node-gyp-bin\\..\..\node_modules\node-gyp\bin\node-gyp.js" rebuild )  
else (node 
"C:\Users\Owner\AppData\Roaming\nvm\v14.15.3\node_modules\npm\node_modules\node-
gyp\bin\node-gyp.js" rebuild ) gyp ERR! find Python gyp ERR! find Python Python 
is not set from command line or npm configuration gyp ERR! find Python Python is 
not set from environment variable PYTHON gyp ERR! find Python checking if 
"python" can be used gyp ERR! find Python - "python" is not in PATH or produced 
an error gyp ERR! find Python checking if "python2" can be used gyp ERR! find 
Python - "python2" is not in PATH or produced an error gyp ERR! find Python 
checking if "python3" can be used gyp ERR! find Python - "python3" is not in 
PATH or produced an error gyp ERR! find Python checking if the py launcher can 
be used to find Python 2 gyp ERR! find Python - "py.exe" is not in PATH or 
produced an error gyp ERR! find Python checking if Python is 
C:\Python27\python.exe gyp ERR! find Python - "C:\Python27\python.exe" could not 
be run gyp ERR! find Python checking if Python is C:\Python37\python.exe gyp 
ERR! find Python - "C:\Python37\python.exe" could not be run gyp ERR! find 
Python gyp ERR! find Python 
********************************************************** gyp ERR! find Python 
You need to install the latest version of Python. gyp ERR! find Python Node-gyp 
should be able to find and use Python. If not, gyp ERR! find Python you can try 
one of the following options: gyp ERR! find Python - Use the switch 
--python="C:\Path\To\python.exe" gyp ERR! find Python   (accepted by both 
node-gyp and npm) gyp ERR! find Python - Set the environment variable PYTHON gyp 
ERR! find Python - Set the npm configuration variable python: gyp ERR! find 
Python   npm config set python "C:\Path\To\python.exe" gyp ERR! find Python For 
more information consult the documentation at: gyp ERR! find Python 
https://github.com/nodejs/node-gyp#installation gyp ERR! find Python 
********************************************************** gyp ERR! find Python 
gyp ERR! configure error gyp ERR! stack Error: Could not find any Python 
installation to use gyp ERR! stack     at PythonFinder.fail 
(C:\Users\Owner\AppData\Roaming\nvm\v14.15.3\node_modules\npm\node_modules\node-
gyp\lib\find-python.js:307:47) gyp ERR! stack     at PythonFinder.runChecks 
(C:\Users\Owner\AppData\Roaming\nvm\v14.15.3\node_modules\npm\node_modules\node-
gyp\lib\find-python.js:136:21) gyp ERR! stack     at PythonFinder.<anonymous> 
(C:\Users\Owner\AppData\Roaming\nvm\v14.15.3\node_modules\npm\node_modules\node-
gyp\lib\find-python.js:225:16) gyp ERR! stack     at 
PythonFinder.execFileCallback 
(C:\Users\Owner\AppData\Roaming\nvm\v14.15.3\node_modules\npm\node_modules\node-
gyp\lib\find-python.js:271:16) gyp ERR! stack     at exithandler 
(child_process.js:315:5) gyp ERR! stack     at ChildProcess.errorhandler 
(child_process.js:327:5) gyp ERR! stack     at ChildProcess.emit 
(events.js:315:20) gyp ERR! stack     at Process.ChildProcess._handle.onexit 
(internal/child_process.js:275:12) gyp ERR! stack     at onErrorNT 
(internal/child_process.js:465:16) gyp ERR! stack     at 
processTicksAndRejections (internal/process/task_queues.js:80:21) gyp ERR! 
System Windows_NT 10.0.18363 gyp ERR! command "C:\\Program 
Files\\nodejs\\node.exe" 
"C:\\Users\\Owner\\AppData\\Roaming\\nvm\\v14.15.3\\node_modules\\npm\\
node_modules\\node-gyp\\bin\\node-gyp.js" "rebuild" gyp ERR! cwd C:\Program 
Files\nodejs\node_modules\@microsoft\rush\node_modules\keytar gyp ERR! node -v 
v14.15.3 gyp ERR! node-gyp -v v5.1.0 gyp ERR! not ok npm WARN optional SKIPPING 
OPTIONAL DEPENDENCY: keytar@5.6.0 
(node_modules\@microsoft\rush\node_modules\keytar): npm WARN optional SKIPPING 
OPTIONAL DEPENDENCY: keytar@5.6.0 install: `prebuild-install || node-gyp 
rebuild` npm WARN optional SKIPPING OPTIONAL DEPENDENCY: Exit status 1

Note that even though @azure/identity marks this dependency as “optional”, the operation still fails:

  • The NPM process exit code is nonzero, causing scripts to fail
  • The above “wall of text” unambiguously communicates to end users that something went wrong

Recommended fix

  • Upgrade keytar by replacing ^5.4.0 with ^7.3.0 which hopefully ships with Node 14.x-compatible binaries; OR
  • Ideally, eliminate keytar and replace it with a different library that is not encumbered by node-gyp binary dependencies

Issue Analytics

  • State:closed
  • Created 3 years ago
  • Comments:6 (2 by maintainers)

github_iconTop GitHub Comments

1reaction
jntrnrcommented, Feb 15, 2021

@octogonz - it should be available now as part of the @azure/identity 1.2.3 release.

1reaction
jntrnrcommented, Feb 2, 2021

@octogonz - thank you for the report. Can you confirm that the build fails at this point? The keytar dependency should be optional, and I’ve seen it report warnings like that but the build still completed successfully.

Read more comments on GitHub >

github_iconTop Results From Across the Web

NPM install fails with node-gyp - Stack Overflow
The strange thing is, that other people in our team have zero problems running the npm-install. The full error looks like this :...
Read more >
Warnings/errors installing the now-cli - ServiceNow Community
I was just reading about the Now Experience & found the associated course. Per the SN course, I installed node v12.22.3 and then...
Read more >
Forge CLI version 5.0.0 - 31 August 2022
Run npm install -g @forge/cli@latest on the command line to install the ... \@forge\cli\node_modules\keytar npm ERR! command failed npm ERR!
Read more >
cannot find module [Node npm Error Solved] - freeCodeCamp
To fix the error, you need to install the package that is absent in your project directory – npm install package-name or yarn...
Read more >
Error While Setting up - #23 by roman_r_m - Joplin Forum
npm install npm WARN deprecated chokidar@2.1.8: Chokidar 2 will break on node v14+. Upgrade to chokidar 3 with 15x less dependencies. npm WARN...
Read more >

github_iconTop Related Medium Post

No results found

github_iconTop Related StackOverflow Question

No results found

github_iconTroubleshoot Live Code

Lightrun enables developers to add logs, metrics and snapshots to live code - no restarts or redeploys required.
Start Free

github_iconTop Related Reddit Thread

No results found

github_iconTop Related Hackernoon Post

No results found

github_iconTop Related Tweet

No results found

github_iconTop Related Dev.to Post

No results found

github_iconTop Related Hashnode Post

No results found