Como usar uma versão diferente do python durante a instalação do NPM?

218

Eu tenho acesso ao terminal para um VPS executando o centos 5.9 e o python padrão 2.4.3 instalado. Também instalei o python 2.7.3 através destes comandos: (usei em make altinstallvez demake 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

instalei o node.js da fonte por meio destes comandos:

python2.7 ./configure
make
make install

O problema é que, quando eu uso npm installe tento instalar um pacote node.js que requer python> 2.4.3, recebo este erro:

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

como devo "passar a opção --python para apontar para Python> = v2.5.0" ?

Nasser Torabzade
fonte
Eu proporia um hack. Como cerca de aliasing esta versão python dentro da sua concha e, em seguida, depois de fechar a shell, o sistema deve retornar ao estado anterior
rafee
@rafee é ótimo, você pode explicar como posso fazer isso? Eu sou um pouco novo em centos!
Nasser Torabzade
Eu quase nunca usei o CentOS. Deve ser como qualquer outra distribuição Linux. Estou falando de procedimento temporário, porque tornar o alias permanente pode danificar seu sistema. Portanto, isso não deve ser feito.
Rafee
@rafee obrigado, vou verificar sua solução.
Nasser Torabzade 08/12
2
alias python = / path / to / python deve ser bom o suficiente. Mas tenha cuidado sobre como fazer a mudança temporária, permanente mudança pode prejudicar o seu sistema
rafee

Respostas:

499

Você pode usar a --pythonopção para npm da seguinte maneira:

npm install --python=python2.7

ou configure-o para ser usado sempre:

npm config set python python2.7

O Npm, por sua vez, passará essa opção para o node-gyp quando necessário.

(nota: Fui eu quem abriu um problema no Github para incluí-lo nos documentos, pois havia muitas perguntas sobre ele ;-))

ack
fonte
35
Essa deve ser a resposta aceita. npm config set python python2.7é a solução definitiva
Alessandro Pezzato 28/07
Se qualquer versão do Python 2 for aceitável, pode-se usar npm install --python=python2?
22414 Freedom_Ben
1
Claro, se python2é no seu $ PATH, use que, por todos os meios :-)
ack
5
Para pyenvcom Python 3, eu usei #npm install --python=/usr/bin/python
Andrei
11
como eu tenho python3 como global, eu preciso de configuração também python27 usando:> este npm configuração conjunto python C: \ python27 \ python.exe
francois
54

configure python para python2.7 antes de executar o npm install

Linux:

export PYTHON=python2.7

Janelas:

set PYTHON=python2.7
Sandtears Kirisame
fonte
4
exporté usado para definir uma variável de ambiente, e as obras variáveis em sua concha e seu processo de criança ..
Sandtears Kirisame
meu ou este? porque se o meu funcionou, então eu ia postar isso como resposta e que deve ser marcado como resposta
rafee
@rafee este funcionou, salvei sua sugestão para futuras necessidades, obrigado.
Nasser Torabzade
7
uso set PYTHON=python2.7no Windows
zacharyliu
1
Essa é uma má idéia quando é necessário que haja um determinado ambiente python3 carregado. O python2.7 é usado apenas para o npm neste caso, portanto, apenas o configure para o npm e não para todo o ambiente do shell sem saber o que você está fazendo.
Ohcibi
34

Para usuários do Windows, algo como isto deve funcionar:

PS C:\angular> npm install --python=C:\Python27\python.exe
Dave L.
fonte
7
Isso pode ser combinado com a resposta aceita, usando: npm config set python C:\Python27\python.exe- Acabei de fazer isso e funcionou bem, o que significa que você não precisa fazer isso toda vez que quiser instalar algo.
Nathan Ridley
7

Ok, então você já encontrou uma solução. Só queria compartilhar o que me foi útil tantas vezes;

Eu criei um setpy2alias que me ajuda a mudar de python.

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

Execute setpy2antes de executar npm install. O interruptor permanece em vigor até você sair do terminal, depoispython volta ao padrão do sistema.

Você pode usar essa técnica para qualquer outro comando / ferramenta também.

vmx
fonte
@NasserTorabzade o aliasing executou o trabalho ou a solução em resposta?
Rafee
@rafee Acabei de salvá-lo para necessidades futuras, não chegou a testá-lo! Desculpe!
Nasser Torabzade
@NasserTorabzade, na verdade, perguntei se PYTHON = python2.7 era bom o suficiente, porque essa é uma solução simples do que a que eu propus.
Rafee
@rafee sim, PYTHON = python2.7 funcionou como um encanto! :)
Nasser Torabzade
1

para usar uma vez rápido isso funciona, npm install --python = "c: \ python27"

MPV
fonte
0

Este funciona melhor se você não tiver o python no caminho ou desejar especificar o diretório :

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

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