Ejecutar Python en Windows para las dependencias de Node.js

226

Me estoy metiendo en una base de código Node.js que requiere que descargue algunas dependencias a través de NPM, es decir, jQuery.

Al intentar ejecutar npm install jquery, sigo recibiendo este error:

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

Parece que la falla se debe a una falta de instalación de Python. Bueno, instalé Python, configuré la variable, reinicié y aún el error.

¿Alguna pista de lo que me estoy perdiendo?

Matt Cashatt
fuente
1
¿Puedes pegar texto como texto, en lugar de una imagen? Además de ser difícil de leer (especialmente porque aparentemente ha reducido las fuentes de mapa de bits de baja resolución), no se puede copiar.
abarnert
1
Más importante: ¿Cómo configuró la variable de entorno antes de reiniciar? Si acabas de hacerlo PYTHON=C:\Python27\Python.exeen tu ventana de cmd y reiniciaste, la configuración se perdió.
abarnert
77
Además, ¿qué versión de Python instaló? Al menos las versiones anteriores de waf y gyp requerían 2.x pero no dijeron nada al respecto, y darían todo tipo de errores misteriosos si instalaras 3.x en su lugar.
abarnert
Gracias por tus comentarios. He publicado el error en formato de texto. Estoy usando v2.7
Matt Cashatt
OK, pero por favor conteste la pregunta "más importante", porque eso es, como el texto lo indica, importante. También es posible que desee probar esto usted mismo: en la cmd.exeventana, antes de probar el npmcomando, ¿ inicia pythono %PYTHON%inicia un intérprete de Python? Si no, no lo has configurado correctamente.
abarnert

Respuestas:

132

Su problema es que no configuró la variable de entorno.

El error dice claramente esto:

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

Y en tu comentario, dices que hiciste esto:

set PYTHONPATH=%PYTHONPATH%;C:\My_python_lib

Eso es bueno, pero eso no establece la PYTHONvariable, establece la PYTHONPATHvariable.


Mientras tanto, solo usar el setcomando solo afecta la cmdsesión actual . Si reinicia después de eso, como dice que lo hizo, termina con una cmdsesión completamente nueva que no tiene esa variable configurada.

Hay algunas formas de establecer las variables de entorno de forma permanente: la más fácil está en el Panel de control del sistema en XP, que por supuesto es diferente en Vista, diferente en 7 y diferente en 8, pero puede buscarlo en Google.

Alternativamente, simplemente haga lo setcorrecto antes del npmcomando, sin reiniciar en el medio.


Puede probar si ha hecho las cosas bien haciendo exactamente lo mismo que el script de configuración está tratando de hacer: antes de ejecutar npm, intente ejecutar %PYTHON%. Si lo ha hecho bien, obtendrá un intérprete de Python (que puede abandonar de inmediato). Si obtiene un error, no lo ha hecho bien.


Hay dos problemas con esto:

set PYTHON=%PYTHON%;D:\Python

En primer lugar, se está configurando PYTHONa ;D:\Python. Ese punto y coma adicional está bien para una lista de rutas separadas por punto y coma, como PATHo PYTHONPATH, pero no para un solo valor como PYTHON. Del mismo modo, agregar un nuevo valor al valor existente es lo que desea cuando desea agregar otra ruta a una lista de rutas, pero no para un solo valor. Entonces, solo quieres set PYTHON=D:\Python.

En segundo lugar, D:\Pythonno es el camino a su intérprete de Python. Es algo como D:\Python\Python.exe, o D:\Python\bin\Python.exe. Encuentre la ruta correcta, asegúrese de que funcione por sí sola (por ejemplo, escriba D:\Python\bin\Python.exey asegúrese de obtener un intérprete de Python), luego configure la variable y úsela.


Entonces:

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

O, si desea que sea permanente, haga el equivalente en el Panel de control.

abarnert
fuente
1
Bien, entonces obtengo esto: Microsoft Windows [Versión 6.1.7601] Copyright (c) 2009 Microsoft Corporation. Todos los derechos reservados. C: \ Users \ Matt Cashatt> set PYTHON =% PYTHON%; D: \ Python C: \ Users \ Matt Cashatt>% PYTHON% '% PYTHON%' no se reconoce como un comando interno o externo, programa operativo o archivo por lotes . C: \ Users \ Matt Cashatt>
Matt Cashatt
1
Además, la Dunidad es donde tengo Python en caso de que te lo preguntes. De nuevo, gracias por tu ayuda.
Matt Cashatt
¡Trabajaron como un encanto, gracias! Para otros: tuve que ejecutar el setcomando en la ventana de comandos de NPM por alguna razón y luego ejecutar el mpm install jquerycomando justo después de eso. Si los hice por separado, no funcionó por alguna razón.
Matt Cashatt
@MatthewPatrickCashatt: como expliqué, el setcomando solo afecta a la cmdventana actual , por lo que debe hacerlo antes de ejecutarlo npmen la misma ventana. Si desea establecer variables de entorno de forma más permanente, eso está en el Panel de control del sistema, o equivalente para su versión de Windows.
abarnert
3
@abarnert es la respuesta real a esta pregunta, luego configure PYTHON = D: \ Python \ bin \ Python.exe: sería útil si proporcionara la forma correcta y explicara la manera incorrecta
the4thelasers
449

Si no ha instalado Python junto con todas las dependencias de nodo-gyp, simplemente abra Powershell o Git Bash con privilegios de administrador y ejecute:

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

y luego para instalar el paquete:

npm install --global node-gyp

una vez instalado, tendrá todas las dependencias de nodo-gyp descargadas, pero aún necesita la variable de entorno. Validar Python se encuentra en la carpeta correcta:

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

Nota: utiliza python 2.7 no 3.x ya que no es compatible

Si no gime, continúe y cree su variable de entorno (usuario):

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

reinicie cmd y verifique que la variable existe a través de la set PYTHONcual debería devolver la variable

Por último volver a aplicar npm install <module>

benscabbia
fuente
1
Tuve un error de permisos, pero logré instalar manualmente Python desde: C: \ Users [me] \. Windows-build-tools \ python.msi. En la instalación hay una opción para agregarlo a la ruta. (Reiniciando el cmd / PS) y funcionó
d.raev
Obtengo la clave dh de error demasiado pequeña: openssk \ ssl \ s3_clnt, c: 3641
user1428716
14
La instalación de las herramientas de compilación de Windows requiere que PowerShell se ejecute como administrador en Windows 10. Esto significa que el comando setx se convierte ensetx PYTHON $env:USERPROFILE\.windows-build-tools\python27\python.exe
Bae
Tuve que ejecutar estos comandos en un símbolo del sistema elevado, pero parece haber funcionado. La instalación manual de Python 3.xy la configuración de la variable de entorno PYTHON para que apunte a eso no funcionó. ¿Asumo que mi error está relacionado con la diferencia en las versiones de Python? Gracias de todos modos!
JeffryHouser
16

Para mí después de instalar windows-build-tools con el siguiente comentario

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

ejecutando el siguiente código

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

ha funcionado

Serhat Oz
fuente
También necesitaba los dos pasos anteriores. También agregaré eso, para mí (Windows 10 Pro 1803, nodo v10.15.3, npm v6.9.0) cuando ejecuté el primer paso, el paso 'npm install windows-build-tools', esa instalación nunca pareció funcionar completo, parecía estar girando sin parar (retroalimentando las mismas líneas de salida a la consola). Después de ver este ciclo sin fin durante varios minutos, elegí usar Ctrl + C para "finalizar el trabajo por lotes". Todo funcionó según lo previsto, interrumpir el ciclo no parecía ser un problema.
StackOverflowUser
10

Uno y / o múltiples de esos deberían ayudar:

  1. Agregue C:\Python27\a su PATHvariable (considerando que tiene Python instalado en este directorio)
    Cómo configurar la PATHvariable env: http://www.computerhope.com/issues/ch000549.htm
    Reinicie su consola y / o Windows después de configurar la variable.

  2. En la misma sección que la anterior ("Variables de entorno"), agregue una nueva variable con nombre PYTHONy valor C:\Python27\python.exe
    Reinicie su consola y / o Windows después de configurar la variable.

  3. Abra la línea de comando de Windows ( cmd) en modo Administrador .
    Cambie el directorio a su ruta de instalación de Python: cd C:\Python27
    haga el enlace simbólico necesario para algunas instalaciones:mklink python2.7.exe python.exe

¡Tenga en cuenta que debe tener Python 2.x, NO 3.x , para ejecutar node-gypinstalaciones basadas!

El texto a continuación dice acerca de Unix, pero la versión de Windows también requiere 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

Este artículo también puede ayudar: https://github.com/nodejs/node-gyp#installation

thybzi
fuente
8

Tuve el mismo problema y ninguna de estas respuestas me ayudó. En mi caso, la variable PYTHON se configuró correctamente. Sin embargo, Python se instaló demasiado profundo, es decir, tiene una ruta demasiado larga. Entonces, hice lo siguiente:

  1. reinstaló python en c: \ python
  2. establezca la variable de entorno PYTHON en C: \ python \ python.exe

¡Y eso es!

zhekaus
fuente
7

Esto ayudó: https://www.npmjs.com/package/node-gyp

Seguí estos pasos:

npm install -g node-gyp

luego:

npm install --global --production windows-build-tools
peegee
fuente
npm install -g node-gyp fue suficiente
Chamin Thilakarathne
6

hay alguna solución para resolver este problema: 1) ejecute su símbolo del sistema como "administrador".

Si la primera solución no resuelve su problema, pruebe esta:

2) abra un símbolo del sistema cuando el administrador pegue la siguiente línea de código y presione enter:

npm install --global --production windows-build-tools
Pedram Rastegar
fuente
5

TL; DR Haga una copia o alias de su python.exe con el nombre python2.7.exe

Mi python 2.7 se instaló como

D: \ app \ Python27 \ python.exe

Siempre recibí este error, no importa cómo configuré (y verifiqué) la variable PYTHON env:

gyp ERR! Error de pila: no se puede encontrar el ejecutable de Python "python2.7", puede configurar la variable PYTHON env.
gyp ERR! apilar en failNoPython (C: \ Archivos de programa \ nodejs \ node_modules \ npm \ node_modules \ node-gyp \ lib \ configure.js: 103: 14)

La razón de esto fue que en configure.js de node-gyp el ejecutable de Python se resolvió como:

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

Y resultó que gyp.opts.python tenía el valor 'python2.7' anulando el proceso.env.PYTHON.

Resolví esto creando un alias para python.exe ejecutable con el nombre que estaba buscando node-gyp:

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

Necesita derechos de administrador para esta operación.

iaarnio
fuente
5

Lo siguiente funcionó para mí desde la línea de comandos como administrador:

Instalar windows-build-tools (esto puede tomar 15-20 minutos):

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

Agregar / actualizar la variable de entorno:

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

Instalación de nodo-gyp:

npm install --global node-gyp

Cambiar el nombre del archivo exe de Python a Python2.7.

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

npm install module_name --save

Sikander
fuente
5

Esta es la forma más fácil de dejar que NPM haga todo por usted

npm --add-python-to-path='true' --debug install --global windows-build-tools
Ashish Gupta
fuente
4

La forma correcta es 1) Descargue e instale Python 2.7.14 desde aquí . 2) Establezca la variable de entorno para python desde aquí .

¡hecho!

nota: establezca la variable de entorno en consecuencia. Respondí aquí por las ventanas.

Herat Patel
fuente
4

Encontré el mismo desafío al intentar instalar [email protected] .

Y después de mirar la documentación oficial actual, y haber leído las respuestas anteriores, me di cuenta de que no necesariamente tiene que instalar node-gyp ni instalar herramientas de compilación de Windows. Esto es lo que dice, aquí sobre la instalación de node-gyp en Windows . Recuerde que node-gyp está involucrado en el proceso de instalación de node-sass. Y realmente no tiene que volver a instalar otra versión de Python.

Este es el salvador, configure la ruta de Python que debe buscar "npm" al instalar cualquier paquete que requiera herramientas de compilación.

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

Había instalado python3.6.3, en windows-7, allí.

MwamiTovi
fuente
La misma solución funcionó para mí durante la instalación [email protected], cuando windows-10[email protected][email protected]
cambié
Tenga en cuenta que esa Python36/pythondebería ser la ruta de acceso a su archivo ejecutable de Python.exe
MwamiTovi el
Si es nuevo, vaya a donde se instaló su ejecutable de Python. En Windows , hold Shift, and Right-Clicknpm config set python
presione
2

¿Por qué no descargar el instalador de Python aquí ? Hace el trabajo por usted cuando verifica la instalación de la ruta

T-prod
fuente
2

Para mí, estos pasos solucionaron el problema:

1- Ejecutando este cmd como administrador:

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

2- Luego se ejecuta npm rebuilddespués de completar el primer paso (especialmente completar la instalación de Python 2.7, que fue la causa principal del problema)

Ahmed Elkoussy
fuente
1

Aquí está el comando correcto: establecer ruta =% ruta%; C: \ Python34 [Reemplazar con la ruta correcta de su instalación de Python]

Tuve el mismo problema y lo resolví así.

Como señalaron otras personas, esta es una configuración volátil, solo funciona para la sesión de cmd actual y (obviamente) debe establecer su ruta antes de ejecutar npm install.

Espero que esto ayude.

Projenix
fuente
1

gyp ERR! configurar error gyp ERR! Error de pila: no se puede encontrar el "python" ejecutable de Python, puede configurar la variable env PYT HON.

No es necesario volver a instalar esta excepción lanzada por el script node-gyp, luego intente reconstruir. Es suficiente variable de entorno de configuración como en mi caso:

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

Si está intentando usar esto en Cygwin, debe seguir las instrucciones de esta respuesta. (Es un problema cómo Cygwin trata los enlaces simbólicos de Windows).

emigenix
fuente
1

Ejemplo: pg_config no ejecutable / error node-gyp

Solución: en Windows solo intente agregar PATH Env -> C: \ Archivos de programa \ PostgreSQL \ 12 \ bin

Trabaja para mí, ahora puedo usar npm i pg-promise por ejemplo u otras dependencias.

P0y
fuente
Pues pg-promiseno necesitas esto. Probablemente fuiste atrapado por esto . Simplemente use la última versión, y estará bien, no necesita ninguna de esas cosas adicionales;)
vitaly-t
0

Para mí, el problema era que estaba usando la última versión del nodo y no la LTSversión que es la versión estable y recomendada para la mayoría de los usuarios.
El uso de la LTSversión resolvió el problema.
Puedes descargarlo desde aquí :

Versión LTS

Versión más reciente actual

Nurul Sundarani
fuente