@azure/identityDescribe the bug
The @azure/identity has this problematic dependency:
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:
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
Now try to install Rush:
C:\> npm install --global @microsoft/rush
Expected result: It should install without problems.
Actual result: The installation fails:
> [email protected] 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: [email protected]
(node_modules\@microsoft\rush\node_modules\keytar): npm WARN optional SKIPPING
OPTIONAL DEPENDENCY: [email protected] 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:
keytar by replacing ^5.4.0 with ^7.3.0 which hopefully ships with Node 14.x-compatible binaries; ORkeytar and replace it with a different library that is not encumbered by node-gyp binary dependenciesIf keytar cannot be easily upgraded or replaced, a third possibility would be to ask the keytar maintainers to publish Node 14 binaries for the 5.6.0 version series.
@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.
NPM returns a nonzero exit code which the build scripts interpret as an error.
Also, the log shows ERR! like 30+ times. I wouldn't consider that a "warning". :-)
node-gyp is a complex development tool meant for package maintainers to use to make prebuilt binaries. It is invoked via "postinstall" only as a last resort when the package maintainers have neglected to provide a binary. In this case maybe because it is an obsolete version of keytar that is not being maintained.
When will PR #13564 be published?
@octogonz - it should be available now as part of the @azure/identity 1.2.3 release.
Thanks!