Comment utiliser une version différente de python lors de l'installation de NPM?

218

J'ai un accès terminal à un VPS exécutant centos 5.9 et python 2.4.3 par défaut installé. J'ai également installé python 2.7.3 via ces commandes: (j'ai utilisé à la make altinstallplace 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

puis j'ai installé node.js depuis la source via ces commandes:

python2.7 ./configure
make
make install

Le problème est que lorsque j'utilise npm installet essaie d'installer un package node.js qui nécessite python> 2.4.3, j'obtiens cette erreur:

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

comment dois-je "passer le commutateur --python pour pointer vers Python> = v2.5.0" ?

Nasser Torabzade
la source
Je proposerais un hack. Que diriez-vous de créer un alias pour cette version python à l'intérieur de votre shell, puis après avoir fermé le shell, le système devrait revenir à son état précédent
rafee
@rafee c'est génial, pouvez-vous expliquer comment puis-je faire cela? Je suis un peu nouveau aux centos!
Nasser Torabzade
Je n'ai presque jamais utilisé CentOS. Cela devrait être comme n'importe quelle autre distribution Linux. Je parle de procédure temporaire, car rendre l'alias permanent peut endommager votre système. Cela ne devrait donc pas être fait.
rafee
@rafee merci, je vais vérifier votre solution.
Nasser Torabzade
2
l'alias python = / path / to / python devrait être suffisant. Mais soyez prudent lorsque vous effectuez un changement temporaire, un changement permanent peut endommager votre système
rafee

Réponses:

499

Vous pouvez utiliser l' --pythonoption pour npm comme ceci:

npm install --python=python2.7

ou réglez-le pour qu'il soit toujours utilisé:

npm config set python python2.7

Npm transmettra à son tour cette option à node-gyp si nécessaire.

(note: je suis celui qui a ouvert un problème sur Github pour l'inclure dans les documents, car il y avait tellement de questions à ce sujet ;-))

ack
la source
35
Ce devrait être la réponse acceptée. npm config set python python2.7est la solution définitive
Alessandro Pezzato
Si une version de Python 2 est acceptable, peut-on l'utiliser npm install --python=python2?
Freedom_Ben
1
Bien sûr, si python2est sur votre $ PATH, utilisez-le, par tous les moyens :-)
ack
5
Pour pyenvavec Python 3, j'ai utilisénpm install --python=/usr/bin/python
Andrei
11
comme j'ai python3 en tant que global, j'ai besoin de configurer également python27 en utilisant:> cette configuration npm définit python C: \ Python27 \ python.exe
francois
54

définissez python sur python2.7 avant d'exécuter l'installation de npm

Linux:

export PYTHON=python2.7

Les fenêtres:

set PYTHON=python2.7
Sandtears Kirisame
la source
4
exportest utilisé pour définir une variable d'environnement, et la variable fonctionne sur votre shell et son processus enfant.
Sandtears Kirisame
mon un ou celui-ci? parce que si mon travail a fonctionné, alors je posterais cela comme réponse et cela devrait être marqué comme réponse
rafee
@rafee celui-ci a fonctionné, j'ai enregistré votre suggestion pour les besoins futurs, merci.
Nasser Torabzade
7
utiliser set PYTHON=python2.7sur Windows
zacharyliu
1
C'est une mauvaise idée lorsqu'il est nécessaire qu'un certain environnement python3 soit chargé. python2.7 n'est utilisé que pour npm dans ce cas, donc ne le définissez que pour npm et non pour tout votre environnement shell sans savoir ce que vous faites.
ohcibi
34

Pour les utilisateurs de Windows, quelque chose comme ça devrait fonctionner:

PS C:\angular> npm install --python=C:\Python27\python.exe
Dave L.
la source
7
Cela peut être combiné avec la réponse acceptée en utilisant: npm config set python C:\Python27\python.exe- Je viens de le faire et cela a bien fonctionné, ce qui signifie que vous ne devez pas le faire à chaque fois que vous souhaitez installer quelque chose.
Nathan Ridley
7

Ok, vous avez donc déjà trouvé une solution. Je voulais juste partager ce qui m'a été utile tant de fois;

J'ai créé un setpy2alias qui m'aide à changer de python.

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

Exécutez setpy2avant d'exécuter npm install. Le commutateur reste en vigueur jusqu'à ce que vous quittiez le terminal, puis pythonrevient à la valeur par défaut du système.

Vous pouvez également utiliser cette technique pour toute autre commande / outil.

vmx
la source
@NasserTorabzade est-ce que l'aliasing a effectué le travail ou la solution en réponse?
rafee
@rafee Je l'ai juste enregistré pour les besoins futurs, je ne suis pas venu le tester! Désolé!
Nasser Torabzade
@NasserTorabzade J'ai en fait demandé si PYTHON = python2.7 était assez bon, car c'est une solution simple et morte que ce que j'ai proposé.
rafee
@rafee oui, PYTHON = python2.7 a fonctionné comme un charme! :)
Nasser Torabzade
1

pour une utilisation rapide, cela fonctionne, npm install --python = "c: \ python27"

MPV
la source
0

Celui-ci fonctionne mieux si vous n'avez pas le python sur le chemin ou si vous souhaitez spécifier le répertoire :

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

//for Linux
npm config set python /usr/bin/python27
olu mide
la source