¿Cómo usar una versión diferente de python durante la instalación de NPM?


218

Tengo acceso de terminal a un VPS con Centos 5.9 y Python 2.4.3 predeterminado instalado. También instalé Python 2.7.3 a través de estos comandos: (utilicé en make altinstalllugar de make install)

wget http://www.python.org/ftp/python/2.7.3/Python-2.7.3.tgz
tar -xf Python-2.7.3.tgz
cd Python-2.7.3
./configure
make
make altinstall

Luego instalé node.js desde la fuente a través de estos comandos:

python2.7 ./configure
make
make install

El problema es que cuando uso npm installe intento instalar un paquete node.js que requiere python> 2.4.3, aparece este error:

gyp ERR! configure error
gyp ERR! stack Error: Python executable "python" is v2.4.3, which is not supported by gyp.
gyp ERR! stack You can pass the --python switch to point to Python >= v2.5.0 & < 3.0.0.
gyp ERR! stack     at failPythonVersion (/usr/local/lib/node_modules/npm/node_modules/node-gyp/lib/configure.js:125:14)
gyp ERR! stack     at /usr/local/lib/node_modules/npm/node_modules/node-gyp/lib/configure.js:114:9

¿Cómo debo "pasar el interruptor --python para que apunte a Python> = v2.5.0" ?


Yo propondría un hack. ¿Qué hay de aliasing esta versión de Python dentro de su shell y luego, después de cerrar el shell, el sistema debería volver al estado anterior
Rafee

@rafee es genial, ¿puedes explicar cómo puedo hacer eso? Soy un poco nuevo en centos!
Nasser Torabzade

Casi nunca usé CentOS. Debería ser como cualquier otra distribución de Linux. Le cuento sobre el procedimiento temporal, porque hacer que el alias sea permanente puede dañar su sistema. Entonces eso no debe hacerse.
rafee

@rafee gracias, comprobaré tu solución.
Nasser Torabzade

2
alias python = / path / to / python debería ser lo suficientemente bueno. Pero tenga cuidado al hacer que el cambio sea temporal, el cambio permanente puede dañar su sistema
rafee

Respuestas:


499

Puede usar la --pythonopción npm de esta manera:

npm install --python=python2.7

o configurarlo para que se use siempre:

npm config set python python2.7

Npm a su vez pasará esta opción a node-gyp cuando sea necesario.

(nota: soy el que abrió un problema en Github para incluir esto en los documentos, ya que había muchas preguntas al respecto ;-))


35
Esta debería ser la respuesta aceptada. npm config set python python2.7es la solución definitiva
Alessandro Pezzato

Si alguna versión de Python 2 es aceptable, ¿se puede usar npm install --python=python2?
Freedom_Ben

1
Claro, si python2está en su $ PATH, úselo, por supuesto :-)
ack

55
Con pyenvPython 3, he usadonpm install --python=/usr/bin/python
Andrei

11
como tengo python3 como global, necesito configurar también python27 usando:> este conjunto de configuración de npm python C: \ Python27 \ python.exe
francois

54

establezca python en python2.7 antes de ejecutar npm install

Linux:

export PYTHON=python2.7

Ventanas:

set PYTHON=python2.7

44
exportse usa para establecer una variable de entorno, y la variable funciona en su shell y su proceso hijo.
Sandtears Kirisame

mi uno o este? porque si mi uno funcionara, lo publicaría como respuesta y eso debería marcarse como respuesta
rafee

@rafee este funcionó, guardé su sugerencia para futuras necesidades, gracias.
Nasser Torabzade

77
uso set PYTHON=python2.7en Windows
zacharyliu

1
Esta es una mala idea cuando es necesario que haya un cierto entorno python3 cargado. python2.7 solo se usa para npm en este caso, así que solo configúrelo para npm y no para todo su entorno de shell sin saber lo que está haciendo.
ohcibi

34

Para los usuarios de Windows, algo como esto debería funcionar:

PS C:\angular> npm install --python=C:\Python27\python.exe

77
Esto se puede combinar con la respuesta aceptada usando: npm config set python C:\Python27\python.exe- Acabo de hacer esto y funcionó bien, lo que significa que no tiene que hacerlo cada vez que desea instalar algo.
Nathan Ridley

7

Ok, ya has encontrado una solución. Solo quería compartir lo que me ha sido útil tantas veces;

He creado un setpy2alias que me ayuda a cambiar python.

alias setpy2="mkdir -p /tmp/bin; ln -s `which python2.7` /tmp/bin/python; export PATH=/tmp/bin:$PATH"

Ejecuta setpy2antes de correr npm install. El interruptor permanece vigente hasta que salga del terminal, luego pythonse restablece a los valores predeterminados del sistema.

Puede utilizar esta técnica para cualquier otro comando / herramienta también.


@NasserTorabzade ¿el aliasing realizó el trabajo o la solución en respuesta?
rafee

@rafee ¡Lo acabo de guardar para futuras necesidades, en realidad no vino a probarlo! ¡lo siento!
Nasser Torabzade

@NasserTorabzade En realidad, pregunté si PYTHON = python2.7 era lo suficientemente bueno, porque esa es una solución muy simple de lo que propuse.
rafee

@rafee sí, PYTHON = python2.7 funcionó de maravilla! :)
Nasser Torabzade

1

para un uso rápido de una vez esto funciona, npm install --python = "c: \ python27"


0

Este funciona mejor si no tiene el python en la ruta o si desea especificar el directorio :

//for Windows
npm config set python C:\Python27\python.exe

//for Linux
npm config set python /usr/bin/python27
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.