Esecuzione di Python su Windows per le dipendenze Node.js


226

Sto entrando in una base di codice Node.js che richiede il download di alcune dipendenze tramite NPM, vale a dire jQuery.

Nel tentativo di eseguire npm install jquery, continuo a ricevere questo errore:

Your environment has been set up for using Node.js 0.8.21 (x64) and NPM

C:\Users\Matt Cashatt>npm install jquery
npm http GET https://registry.npmjs.org/jquery
npm http 304 https://registry.npmjs.org/jquery
npm http GET https://registry.npmjs.org/jsdom
npm http GET https://registry.npmjs.org/xmlhttprequest
npm http GET https://registry.npmjs.org/htmlparser/1.7.6
npm http GET https://registry.npmjs.org/location/0.0.1
npm http GET https://registry.npmjs.org/navigator
npm http GET https://registry.npmjs.org/contextify
npm http 304 https://registry.npmjs.org/htmlparser/1.7.6
npm http 304 https://registry.npmjs.org/xmlhttprequest
npm http 304 https://registry.npmjs.org/location/0.0.1
npm http 304 https://registry.npmjs.org/navigator
npm http 304 https://registry.npmjs.org/jsdom
npm http 304 https://registry.npmjs.org/contextify
npm http GET https://registry.npmjs.org/bindings
npm http GET https://registry.npmjs.org/cssom
npm http GET https://registry.npmjs.org/cssstyle
npm http GET https://registry.npmjs.org/request
npm http 304 https://registry.npmjs.org/bindings

> contextify@0.1.4 install C:\Users\Matt Cashatt\node_modules\jquery\node_module
s\contextify
> node-gyp rebuild


C:\Users\Matt Cashatt\node_modules\jquery\node_modules\contextify>node "C:\Progr
am Files\nodejs\node_modules\npm\bin\node-gyp-bin\\..\..\node_modules\node-gyp\b
in\node-gyp.js" rebuild
npm http 304 https://registry.npmjs.org/cssstyle
npm http 304 https://registry.npmjs.org/cssom
npm http 304 https://registry.npmjs.org/request
gyp ERR! configure error
gyp ERR! stack Error: Can't find Python executable "python", you can set the PYT
HON env variable.
gyp ERR! stack     at failNoPython (C:\Program Files\nodejs\node_modules\npm\nod
e_modules\node-gyp\lib\configure.js:113:14)
gyp ERR! stack     at C:\Program Files\nodejs\node_modules\npm\node_modules\node
-gyp\lib\configure.js:82:11
gyp ERR! stack     at Object.oncomplete (fs.js:297:15)
gyp ERR! System Windows_NT 6.1.7601
gyp ERR! command "node" "C:\\Program Files\\nodejs\\node_modules\\npm\\node_modu
les\\node-gyp\\bin\\node-gyp.js" "rebuild"
gyp ERR! cwd C:\Users\Matt Cashatt\node_modules\jquery\node_modules\contextify
gyp ERR! node -v v0.8.21
gyp ERR! node-gyp -v v0.8.4
gyp ERR! not ok
npm ERR! error rolling back Error: ENOTEMPTY, rmdir 'C:\Users\Matt Cashatt\node_
modules\jquery\node_modules\jsdom\node_modules\request\tests'
npm ERR! error rolling back  jquery@1.8.3 { [Error: ENOTEMPTY, rmdir 'C:\Users\M
att Cashatt\node_modules\jquery\node_modules\jsdom\node_modules\request\tests']
npm ERR! error rolling back   errno: 53,
npm ERR! error rolling back   code: 'ENOTEMPTY',
npm ERR! error rolling back   path: 'C:\\Users\\Matt Cashatt\\node_modules\\jque
ry\\node_modules\\jsdom\\node_modules\\request\\tests' }
npm ERR! contextify@0.1.4 install: `node-gyp rebuild`
npm ERR! `cmd "/c" "node-gyp rebuild"` failed with 1
npm ERR!
npm ERR! Failed at the contextify@0.1.4 install script.
npm ERR! This is most likely a problem with the contextify package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR!     node-gyp rebuild
npm ERR! You can get their info via:
npm ERR!     npm owner ls contextify
npm ERR! There is likely additional logging output above.

npm ERR! System Windows_NT 6.1.7601
npm ERR! command "C:\\Program Files\\nodejs\\\\node.exe" "C:\\Program Files\\nod
ejs\\node_modules\\npm\\bin\\npm-cli.js" "install" "jquery"
npm ERR! cwd C:\Users\Matt Cashatt
npm ERR! node -v v0.8.21
npm ERR! npm -v 1.2.11
npm ERR! code ELIFECYCLE
npm ERR! Error: ENOENT, lstat 'C:\Users\Matt Cashatt\node_modules\jquery\node_mo
dules\jsdom\node_modules\request\tests\test-pipes.js'
npm ERR! If you need help, you may report this log at:
npm ERR!     <http://github.com/isaacs/npm/issues>
npm ERR! or email it to:
npm ERR!     <npm-@googlegroups.com>

npm ERR! System Windows_NT 6.1.7601
npm ERR! command "C:\\Program Files\\nodejs\\\\node.exe" "C:\\Program Files\\nod
ejs\\node_modules\\npm\\bin\\npm-cli.js" "install" "jquery"
npm ERR! cwd C:\Users\Matt Cashatt
npm ERR! node -v v0.8.21
npm ERR! npm -v 1.2.11
npm ERR! path C:\Users\Matt Cashatt\node_modules\jquery\node_modules\jsdom\node_
modules\request\tests\test-pipes.js
npm ERR! fstream_path C:\Users\Matt Cashatt\node_modules\jquery\node_modules\jsd
om\node_modules\request\tests\test-pipes.js
npm ERR! fstream_type File
npm ERR! fstream_class FileWriter
npm ERR! code ENOENT
npm ERR! errno 34
npm ERR! fstream_stack C:\Program Files\nodejs\node_modules\npm\node_modules\fst
ream\lib\writer.js:284:26
npm ERR! fstream_stack Object.oncomplete (fs.js:297:15)
npm ERR!
npm ERR! Additional logging details can be found in:
npm ERR!     C:\Users\Matt Cashatt\npm-debug.log
npm ERR! not ok code 0

C:\Users\Matt Cashatt>

Sembra che l'errore sia dovuto a un'installazione Python mancante. Bene, ho installato Python, impostato la variabile, riavviato e ancora l'errore.

Qualche idea su cosa mi manchi?


1
Riesci a incollare il testo come testo anziché come immagine? Oltre ad essere difficile da leggere (soprattutto perché apparentemente ridimensionato i caratteri bitmap già a bassa risoluzione), non è copiabile.
Abarnert,

1
Ancora più importante: come hai impostato la variabile d'ambiente prima di riavviare? Se l'hai appena fatto PYTHON=C:\Python27\Python.exenella tua finestra cmd e riavviato, l'impostazione andava persa.
Abarnert,

7
Inoltre, quale versione di Python hai installato? Almeno le versioni precedenti di waf e gyp richiedevano 2.x ma non dicevano nulla al riguardo, e avrebbero dato tutti i tipi di errori misteriosi se invece avessi installato 3.x.
Abarnert,

Grazie per i tuoi commenti Ho pubblicato l'errore in formato testo. Sto usando la v2.7
Matt Cashatt il

OK, ma per favore rispondi alla domanda "più importante", perché è, come suggerisce il testo, importante. Potresti anche provare tu stesso: nella cmd.exefinestra, prima di provare il npmcomando, pythono %PYTHON%avvia un interprete Python? In caso contrario, non è stato impostato correttamente.
Abarnert,

Risposte:


132

Il tuo problema è che non hai impostato la variabile d'ambiente.

L'errore dice chiaramente questo:

gyp ERR! stack Error: Can't find Python executable "python", you can set the PYTHON env variable.

E nel tuo commento dici di aver fatto questo:

set PYTHONPATH=%PYTHONPATH%;C:\My_python_lib

È carino, ma ciò non imposta la PYTHONvariabile, imposta la PYTHONPATHvariabile.


Nel frattempo, il solo utilizzo del setcomando influisce solo sulla cmdsessione corrente . Se riavvii dopo quello, come dici di aver fatto, finirai con una cmdsessione completamente nuova che non ha quella variabile impostata in essa.

Esistono alcuni modi per impostare le variabili di ambiente in modo permanente: il più semplice è nel Pannello di controllo del sistema in XP, che è ovviamente diverso in Vista, di nuovo diverso in 7 e di nuovo diverso in 8, ma puoi cercarlo su Google.

In alternativa, fai semplicemente il setdiritto prima del npmcomando, senza riavviare in mezzo.


Puoi verificare se hai fatto bene le cose facendo esattamente la stessa cosa che lo script di configurazione sta tentando di fare: prima di eseguire npm, prova a eseguire %PYTHON%. Se l'hai fatto bene, otterrai un interprete Python (che puoi immediatamente abbandonare). Se ricevi un errore, non l'hai fatto bene.


Ci sono due problemi con questo:

set PYTHON=%PYTHON%;D:\Python

In primo luogo, si sta impostando PYTHONa ;D:\Python. Quel punto e virgola aggiuntivo va bene per un elenco di percorsi separati da punto e virgola, come PATHo PYTHONPATH, ma non per un singolo valore come PYTHON. Allo stesso modo, l'aggiunta di un nuovo valore al valore esistente è ciò che si desidera quando si desidera aggiungere un altro percorso a un elenco di percorsi, ma non per un singolo valore. Quindi, vuoi solo set PYTHON=D:\Python.

Secondo, D:\Pythonnon è il percorso del tuo interprete Python. È qualcosa di simile D:\Python\Python.exeo D:\Python\bin\Python.exe. Trova il percorso giusto, assicurati che funzioni da solo (ad esempio, digita D:\Python\bin\Python.exee assicurati di ottenere un interprete Python), quindi imposta la variabile e usala.


Così:

set PYTHON=D:\Python\bin\Python.exe

Oppure, se vuoi renderlo permanente, fai l'equivalente nel Pannello di controllo.


1
OK, quindi ottengo questo: Microsoft Windows [Versione 6.1.7601] Copyright (c) 2009 Microsoft Corporation. Tutti i diritti riservati. C: \ Users \ Matt Cashatt> set PYTHON =% PYTHON%; D: \ Python C: \ Users \ Matt Cashatt>% PYTHON% '% PYTHON%' non è riconosciuto come comando interno o esterno, programma eseguibile o file batch . C: \ Users \ Matt Cashatt>
Matt Cashatt,

1
Inoltre, l' Dunità è dove ho Python nel caso te lo stia chiedendo. Grazie ancora per il vostro aiuto.
Matt Cashatt,

Ha funzionato come un fascino, grazie! Per altri: ho dovuto eseguire il setcomando nella finestra di comando NPM per qualche motivo e quindi eseguire il mpm install jquerycomando subito dopo. Se li avessi fatti separatamente, non avrebbe funzionato per qualche motivo.
Matt Cashatt,

@MatthewPatrickCashatt: Come ho spiegato, il setcomando ha effetto solo sulla cmdfinestra corrente , quindi devi farlo prima di eseguire npmnella stessa finestra. Se desideri impostare le variabili di ambiente in modo più permanente, è disponibile nel Pannello di controllo del sistema o equivalente per la tua versione di Windows.
Abarnert,

3
@abarnert è la vera risposta a questa domanda, quindi imposta PYTHON = D: \ Python \ bin \ Python.exe - sarebbe utile se fornissi la strada corretta e spiegassi la strada sbagliata
reach4thelasers

449

Se non hai installato Python insieme a tutte le dipendenze node-gyp, apri semplicemente Powershell o Git Bash con i privilegi di amministratore ed esegui:

npm install --global --production windows-build-tools

e quindi per installare il pacchetto:

npm install --global node-gyp

una volta installato, avrai scaricato tutte le dipendenze nodo-gyp, ma avrai comunque bisogno della variabile d'ambiente. Convalida Python si trova effettivamente nella cartella corretta:

C:\Users\ben\.windows-build-tools\python27\python.exe 

Nota: utilizza Python 2.7 e non 3.x poiché non è supportato

Se non si lamenta, vai avanti e crea la tua variabile d'ambiente (utente):

setx PYTHON "%USERPROFILE%\.windows-build-tools\python27\python.exe"

riavvia cmd e verifica l'esistenza della variabile tramite la set PYTHONquale dovrebbe restituire la variabile

Infine riapplicare npm install <module>


1
Ho avuto qualche errore di autorizzazione, ma sono riuscito a installare manualmente Python da: C: \ Users [me] \. Windows-build-tools \ python.msi. Nell'installazione è un'opzione per aggiungerlo al percorso. (Riavvio del cmd / PS) e ha funzionato
d.raev il

Ottengo l'errore dh chiave troppo piccola: openssk \ ssl \ s3_clnt, c: 3641
user1428716

14
Installazione di Windows-build-tools richiesta PowerShell eseguito come Admin su Windows 10. Questo significa che il comando setx diventasetx PYTHON $env:USERPROFILE\.windows-build-tools\python27\python.exe
Bae

Ho dovuto eseguire questi comandi in un prompt dei comandi con privilegi elevati, ma sembra che abbia funzionato. L'installazione manuale di Python 3.x e l'impostazione della variabile d'ambiente PYTHON in modo che puntassero a quella non funzionavano. Presumo il mio errore relativo alla differenza nel versioning di Python? Grazie a prescindere!
JeffryHouser,

16

Per me dopo aver installato windows-build-tools con il commento qui sotto

npm --add-python-to-path='true' --debug install --global windows-build-tools

eseguendo il codice qui sotto

npm config set python "%USERPROFILE%\.windows-build-tools\python27\python.exe"

ha funzionato.


Avevo anche bisogno di entrambi i passaggi precedenti. Aggiungerò anche che, per me, (Windows 10 Pro 1803, nodo v10.15.3, npm v6.9.0) quando ho eseguito il primo passaggio, il passaggio "npm install windows-build-tools", l'installazione non è mai sembrata completo, sembrava essere in loop all'infinito (restituendo le stesse linee di output alla console). Dopo aver visto questo ciclo apparentemente senza fine per un certo numero di minuti, ho scelto di usare Ctrl + C per "terminare il processo batch". Tutto ha funzionato come previsto, interrompere il loop non sembrava essere un problema.
StackOverflowUser


10

Uno e / o multipli di questi dovrebbero aiutare:

  1. Aggiungi C:\Python27\alla tua PATHvariabile (considerando che hai installato Python in questa directory)
    Come impostare la PATHvariabile env: http://www.computerhope.com/issues/ch000549.htm
    Riavvia la tua console e / o Windows dopo aver impostato la variabile.

  2. Nella stessa sezione precedente ("Variabili d'ambiente"), aggiungi una nuova variabile con nome PYTHONe valore C:\Python27\python.exe
    Riavvia la tua console e / o Windows dopo aver impostato la variabile.

  3. Apri la riga di comando di Windows ( cmd) in modalità Amministratore .
    Cambia directory nel percorso di installazione di Python: cd C:\Python27
    Rendi il collegamento simbolico necessario per alcune installazioni:mklink python2.7.exe python.exe

Nota che dovresti avere Python 2.x, NON 3.x , per eseguire node-gypinstallazioni basate!

Il testo seguente dice di Unix, ma la versione di Windows richiede anche Python 2.x:

You can install with npm:

$ npm install -g node-gyp
You will also need to install:

On Unix:
python (v2.7 recommended, v3.x.x is not supported)
make
A proper C/C++ compiler toolchain, like GCC

Questo articolo può anche aiutare: https://github.com/nodejs/node-gyp#installation


8

Ho avuto lo stesso problema e nessuna di queste risposte ha aiutato. Nel mio caso la variabile PYTHON è stata impostata correttamente. Tuttavia python è stato installato troppo in profondità, ovvero ha un percorso troppo lungo. Quindi, ho fatto quanto segue:

  1. reinstallato python in c: \ python
  2. imposta la variabile ambientale PYTHON su C: \ python \ python.exe

E questo è tutto!



6

ci sono alcune soluzioni per risolvere questo problema: 1) eseguire il prompt dei comandi come "amministratore".

se la prima soluzione non risolve il problema, prova questa:

2) apri un prompt dei comandi come amministratore incolla la seguente riga di codice e premi invio:

npm install --global --production windows-build-tools

5

TL; DR Crea una copia o un alias del tuo python.exe con il nome python2.7.exe

My python 2.7 è stato installato come

D: \ app \ Python27 \ python.exe

Ho sempre ricevuto questo errore, indipendentemente da come ho impostato (e verificato) la variabile env PYTHON:

gyp ERR! stack error: Impossibile trovare l'eseguibile Python "python2.7", è possibile impostare la variabile env PYTHON.
gyp ERR! stack at failNoPython (C: \ Programmi \ nodejs \ node_modules \ npm \ node_modules \ node-gyp \ lib \ configure.js: 103: 14)

La ragione di ciò era che in configure.js di node-gyp l'eseguibile python era risolto come:

var python = gyp.opts.python || process.env.PYTHON || 'python'

E si è scoperto che gyp.opts.python aveva il valore 'python2.7', quindi sovrascrivendo process.env.PYTHON.

Ho risolto questo problema creando un alias per l'eseguibile python.exe con il nome node-gyp che cercavo:

D:\app\Python27>mklink python2.7.exe python.exe

Per questa operazione sono necessari i diritti di amministratore.


5

Quanto segue ha funzionato per me dalla riga di comando come amministratore:

Installazione di windows-build-tools (l'operazione può richiedere 15-20 minuti):

 npm --add-python-to-path='true' --debug install --global windows-build-tools

Aggiunta / aggiornamento della variabile d'ambiente:

setx PYTHON "%USERPROFILE%\.windows-build-tools\python27\python.exe"

Installazione di node-gyp:

npm install --global node-gyp

Modifica del nome del file exe da Python a Python2.7.

C:\Users\username\.windows-build-tools\python27\Python2.7

npm install module_name --save



5

Questo è il modo più semplice per lasciare che NPM faccia tutto per te

npm --add-python-to-path='true' --debug install --global windows-build-tools

4

Il modo giusto è 1) Scarica e installa python 2.7.14 da qui . 2) Imposta la variabile d'ambiente per Python da qui .

fatto!

nota: impostare la variabile di ambiente di conseguenza. Ho risposto qui per Windows.


4

Ho incontrato la stessa sfida durante il tentativo di installare node-sass@4.9.4 .

E dopo aver esaminato l'attuale documentazione ufficiale e aver letto le risposte sopra, ho notato che potrebbe non essere necessario installare node-gyp né installare gli strumenti di Windows-build. Questo è ciò che dice, qui sull'installazione di node-gyp su Windows . Ricorda node-gyp è coinvolto nel processo di installazione di node-sass. E non è necessario reinstallare un'altra versione di Python.

Questo è il salvatore, configura il percorso python che "npm" dovrebbe cercare durante l'installazione di tutti i pacchetti che richiedono strumenti di compilazione.

C:\> npm config set python /Python36/python

Avevo installato python3.6.3, su Windows 7, lì.


La stessa soluzione ha funzionato per me durante l'installazione node-sass@4.9.4, quando sono passato a windows-10, usando node@10.6.3eyarn@1.19.1
MwamiTovi il

Nota che Python36/pythondovrebbe essere il percorso del tuo file eseguibile python.exe
MwamiTovi

Se nuovo, vai dove è stato installato il tuo eseguibile python. In Windows , premere hold Shift, and Right-Clicke inserire questo:npm config set python
MwamiTovi

2

Perché non scaricare il programma di installazione di Python qui ? Rende il lavoro per te quando controlli l'installazione del percorso


2

Per me, questi passaggi hanno risolto il problema:

1- Eseguendo questo cmd come amministratore:

npm install --global --production windows-build-tools

2- Quindi in esecuzione npm rebuilddopo il completamento del primo passaggio (in particolare il completamento dell'installazione di Python 2.7, che è stata la causa principale del problema)


1

Ecco il comando corretto: set path =% path%; C: \ Python34 [Sostituisci con il percorso corretto dell'installazione di Python]

Ho avuto lo stesso problema e ho appena risolto questo problema.

Come alcuni altri hanno sottolineato, questa è una configurazione volatile, funziona solo per la sessione cmd corrente e (ovviamente) devi impostare il tuo percorso prima di eseguire npm install.

Spero che aiuti.


1

gyp ERR! configura errore gyp ERR! stack error: Impossibile trovare l'eseguibile "python" di Python, puoi impostare la variabile env PYT HON.

Non è necessario reinstallare, questa eccezione viene generata dallo script node-gyp, quindi prova a ricostruire. È abbastanza variabile d'ambiente di installazione come nel mio caso ho fatto:

SET PYTHON=C:\work\_env\Python27\python.exe

1

Se stai cercando di utilizzare questo su Cygwin, devi seguire le istruzioni in questa risposta. (È un problema il modo in cui Cygwin tratta i symlink di Windows.)


1

Esempio: pg_config non eseguibile / errore node-gyp

Soluzione: su Windows, prova ad aggiungere PATH Env -> C: \ Programmi \ PostgreSQL \ 12 \ bin

Lavora con me, ora posso usare npm i pg-promise per esempio o altre dipendenze.


Per pg-promisete non hai bisogno di questo. Probabilmente sei stato catturato da questo . Usa l'ultima versione e
starai

0

Per me, il problema era che stavo usando l'ultima versione del nodo e non la LTSversione che è la versione stabile e raccomandata per la maggior parte degli utenti.
L'uso della LTSversione ha risolto il problema.
Puoi scaricare da qui:

Versione LTS

Ultima versione attuale

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.