risposta-alla-domanda-sullo-sviluppo-web-bd.com

Esecuzione di Python su Windows per le dipendenze Node.js

Sto entrando in una base di codice Node.js che richiede il download di alcune dipendenze tramite NPM, ovvero 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

> [email protected] 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  [email protected] { [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! [email protected] install: `node-gyp rebuild`
npm ERR! `cmd "/c" "node-gyp rebuild"` failed with 1
npm ERR!
npm ERR! Failed at the [email protected] 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!     <[email protected]>

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 mancante di Python. Bene, ho installato Python, impostato la variabile, e riavviato e ancora l'errore.

Qualche indizio su cosa mi sto perdendo?

195
Matt Cashatt

Il tuo problema è che tu non hai imposta 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, tu dici che l'hai fatto:

set PYTHONPATH=%PYTHONPATH%;C:\My_python_lib

È carino, ma non imposta la variabile PYTHON, imposta la variabile PYTHONPATH.


Nel frattempo, l'uso del comando set ha effetto solo sulla sessione cmd corrente. Se si riavvia dopo, come dici tu, si finisce con una nuova cmd session che non ha la variabile impostata in essa.

Ci sono 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, diverso ancora in 7, e diverso ancora in 8, ma puoi google per esso.

In alternativa, basta fare il set giusto prima del comando npm, senza riavviare tra.


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


Ci sono due problemi con questo:

set PYTHON=%PYTHON%;D:\Python

Innanzitutto, stai impostando PYTHON su ;D:\Python. Quel punto e virgola in più va bene per un elenco di percorsi separati da punto e virgola, come PATH o PYTHONPATH, ma non per un singolo valore come PYTHON. Allo stesso modo, aggiungere 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:\Python non è il percorso del tuo interprete Python. È qualcosa come D:\Python\Python.exe o D:\Python\bin\Python.exe. Trova il percorso giusto, assicurati che funzioni da solo (ad esempio, digita D:\Python\bin\Python.exe e assicurati di avere 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.

117
abarnert

Se non hai installato python insieme a tutte le dipendenze di 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, si scaricheranno tutte le dipendenze di node-gyp, ma sarà comunque necessaria la variabile di ambiente. Convalidare Python si trova effettivamente nella cartella corretta: 

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

Nota - usa python 2.7 e non x 3. dato che non è supportato

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

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

riavviare cmd e verificare che la variabile esista tramite set PYTHON che dovrebbe restituire la variabile 

Riapplica infine npm install <module>

394
benscabbia

Ecco una guida che ha risolto molti di questi problemi per me.

http://www.steveworkman.com/node-js/2012/installing-jsdom-on-windows/

Ricordo in particolare la versione python come importante. Assicurati di installare 2.7.3 invece di 3.

14
Jon Leavitt

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

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

E questo è tutto!

7
zhekaus

Uno e/o molti di questi dovrebbero aiutare:

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

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

  3. Aprire la riga di comando di Windows (cmd) in modalità amministratore.
    Cambia directory nel percorso di installazione di Python: cd C:\Python27
    Crea un link simbolico necessario per alcune installazioni: mklink python2.7.exe python.exe

Si noti che si dovrebbe avere Python 2.x, NOT 3.x, per eseguire le installazioni basate su node-gyp!

Il testo seguente parla 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

7
thybzi

ci sono alcune soluzioni per risolvere questo problema: 1) esegui il comando Prompt come "amministratore".

se la prima soluzione non risolve il tuo problema prova questo:

2) apri un comando Richiedi come amministratore incolla la seguente riga di codice e premi invio:

npm install --global --production windows-build-tools
4
Pedram Rastegar

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

Il mio python 2.7 è stato installato come 

D:\app\Python27\python.exe

Ho sempre avuto questo errore, non importa quanto ho impostato (e verificato) la variabile env di PYTHON:

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

La ragione di ciò è che nel configure.js di node-gyp l'eseguibile python è stato risolto come:

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

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

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

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

Hai bisogno dei diritti di amministratore per questa operazione.

4
iaarnio

non posso fare a meno di menzionare questo . Se stai usando Python3 e non riescono con node-gyp, allora sono triste nel dirti che node-gyp attualmente non supporta python3.

Ecco un link per te: https://github.com/nodejs/node-gyp/issues/1268https://github.com/nodejs/node-gyp/ numeri/193

4
Gabriel Wu

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

Installazione di windows-build-tools (questo può richiedere 15-20 minuti):

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

Aggiunta/aggiornamento della variabile di ambiente:

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

Installazione di node-gyp:

npm install --global node-gyp

Cambiare il nome del file exe da Python a Python2.7.

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

npm install module_name --save

4
Sikander

Ciò ha aiutato: https://www.npmjs.com/package/node-gyp

Ho seguito questi passaggi:

npm install -g node-gyp

poi:

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

Il modo giusto è 1) Scaricare e installare python 2.7.14 da here . 2) Impostare la variabile di ambiente per python da here .

fatto!

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

3
Herat Patel

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.

2
Serhat Oz

Perché non scaricare il programma di installazione di python here ? Fa il lavoro per te quando controlli l'installazione del percorso

1
T-prod

gyp ERR! configura errore gyp ERR! Stack Error: impossibile trovare Python eseguibile "python", è possibile impostare il PYT HON variabile ENV.

Non è necessario reinstallare, questa eccezione viene lanciata dallo script node-gyp, quindi tenta di ricostruire. È abbastanza variabile di ambiente di setup come nel mio caso ho fatto:

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

Per me, questi passaggi hanno risolto il problema:

1- Esecuzione di questo cmd come amministratore:

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

2- Eseguendo npm rebuild dopo che il primo passo è completato(specialmente completando l'installazione di python 2.7, che era la causa principale del problema)

0
Ahmed Elkoussy

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

Versione LTS

Ultima versione attuale

0
Nurul Sundarani

Ecco il comando corretto: set path =% path%; C:\Python34 [Sostituisci con il percorso corretto della tua installazione python]

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

Come hanno sottolineato altre persone, questa configurazione è volatile, funziona solo per la sessione CMD corrente e (ovviamente) devi impostare il percorso prima di eseguire l'installazione di npm.

Spero che questo possa essere d'aiuto.

0
Projenix

Se stai cercando di usarlo su Cygwin, devi seguire le istruzioni in this answer. (È un problema il modo in cui Cygwin tratta i collegamenti simbolici di Windows).

0
emigenix