Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[rush] Rush fails to install under Node 14.x without Python/C++ #2467

Closed
octogonz opened this issue Feb 2, 2021 · 3 comments
Closed

[rush] Rush fails to install under Node 14.x without Python/C++ #2467

octogonz opened this issue Feb 2, 2021 · 3 comments
Labels
bug Something isn't working as intended external issue The root cause is with an external component that needs a fix or workaround

Comments

@octogonz
Copy link
Collaborator

octogonz commented Feb 2, 2021

Summary

Rush's experimental cloud build cache feature seems to have brought in a dependency on keytar, which uses native APIs and thus requires prebuilt binaries. But the outdated version 5.6.0 does not ship with prebuilt binaries for Node 14 (currently LTS).

This causes npm install -g @microsoft/rush to fail.

Repro steps

  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:

> [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

Details

Possible fixes:

  • Best: Eliminate the dependency on keytar
  • Install keytar on demand, only if the build cache feature is enabled
  • Upgrade keytar from 5.6.0 to 7.3.0 which probably supports Node.js LTS.

The keytar package is a dependency of the @azure/identity package. Rush is using the latest version of @azure/identity (1.2.2), but it depends on the obsolete keytar SemVer range ^5.4.0.

Standard questions

Question Answer
@microsoft/rush globally installed version? 5.38.0
Operating system? Windows
Would you consider contributing a PR? Yes
Node.js version (node -v)? 14.15.3
@octogonz octogonz added the bug Something isn't working as intended label Feb 2, 2021
@octogonz octogonz added the external issue The root cause is with an external component that needs a fix or workaround label Feb 11, 2021
@HipsterZipster
Copy link

Please eliminate the keytar dependency somehow. For those of us working in locked-down corp environments that can't easily pull prebuilt native libraries from the internet, this is a major pain. We specifically avoid libraries that require native dependencies unless absolutely necessary. Rush's pure JS approach was one of our big draws!

@octogonz
Copy link
Collaborator Author

@HipsterZipster you could also provide your feedback to the maintainers of the upstream package: Azure/azure-sdk-for-js#13531

@iclanton Is there any way for Rush's cloud build cache to manage credentials without depending on the @azure/identity package?

@octogonz
Copy link
Collaborator Author

I'm closing this issue since the original problem is now fixed.

I opened #2492 to see if we can eliminate keytar entirely.

@iclanton iclanton moved this to Closed in Bug Triage Aug 15, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working as intended external issue The root cause is with an external component that needs a fix or workaround
Projects
Archived in project
Development

No branches or pull requests

2 participants