Come utilizzare una versione diversa di Python durante l'installazione di NPM?


218

Ho accesso terminale a un VPS con Centos 5.9 e installato Python 2.4.3 predefinito. Ho anche installato Python 2.7.3 tramite questi comandi: (ho usato make altinstallinvece di 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

quindi ho installato node.js dall'origine tramite questi comandi:

python2.7 ./configure
make
make install

Il problema è che quando uso npm installe provo ad installare un pacchetto node.js che richiede python> 2.4.3 ottengo questo errore:

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

come devo "passare l'opzione --python per puntare a Python> = v2.5.0" ?


Vorrei proporre un trucco. Che ne dici di alias questa versione di Python nella tua shell e poi dopo aver chiuso la shell, il sistema dovrebbe tornare allo stato precedente
rafee

@rafee è fantastico, puoi spiegare come posso farlo? Sono un po 'nuovo per centos!
Nasser Torabzade,

Non ho quasi mai usato CentOS. Dovrebbe essere proprio come qualsiasi altra distribuzione di Linux. Sto parlando di una procedura temporanea, perché rendere permanente l'alias può danneggiare il sistema. Quindi non dovrebbe essere fatto.
rafee

@ Grazie, controllerò la tua soluzione.
Nasser Torabzade,

2
alias python = / path / to / python dovrebbe essere abbastanza buono. Ma fai attenzione a rendere temporaneo il cambiamento, un cambiamento permanente potrebbe danneggiare il tuo sistema
rafee

Risposte:


499

Puoi usare l' --pythonopzione per npm in questo modo:

npm install --python=python2.7

o impostalo per essere usato sempre:

npm config set python python2.7

Npm a sua volta passerà questa opzione a node-gyp quando necessario.

(nota: sono io quello che ha aperto un problema su Github per includerlo nei documenti, dato che c'erano così tante domande al riguardo ;-))


35
Questa dovrebbe essere la risposta accettata. npm config set python python2.7è la soluzione definitiva
Alessandro Pezzato,

Se una versione di Python 2 è accettabile, si può usare npm install --python=python2?
Freedom_Ben,

1
Certo, se python2è sul tuo $ PERCORSO, usalo,
sicuramente

5
Per pyenvcon Python 3, ho usatonpm install --python=/usr/bin/python
Andrei il

11
dato che ho python3 come globale, devo installare anche python27 usando:> questa configurazione di npm ha impostato python C: \ Python27 \ python.exe
francois

54

impostare python su python2.7 prima di eseguire npm install

Linux:

export PYTHON=python2.7

Finestre:

set PYTHON=python2.7

4
exportè usato per impostare una variabile d'ambiente, e la variabile funziona sulla tua shell e sul suo processo figlio ..
Sandtears Kirisame

il mio o questo? perché se il mio funzionasse, allora lo
pubblicherei

@Quindi ha funzionato, ho salvato il tuo suggerimento per esigenze future, grazie.
Nasser Torabzade,

7
utilizzare set PYTHON=python2.7su Windows
zacharyliu,

1
Questa è una cattiva idea quando è necessario che sia caricato un determinato ambiente python3. python2.7 è usato solo per npm in questo caso, quindi impostalo solo per npm e non per l'intero ambiente shell senza sapere cosa stai facendo.
ohcibi,

34

Per gli utenti Windows qualcosa del genere dovrebbe funzionare:

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

7
Questo può essere combinato con la risposta accettata usando: npm config set python C:\Python27\python.exe- Ho appena fatto questo e ha funzionato bene, il che significa che non è necessario farlo ogni volta che si desidera installare qualcosa.
Nathan Ridley,

7

Ok, quindi hai già trovato una soluzione. Volevo solo condividere ciò che mi è stato utile così tante volte;

Ho creato un setpy2alias che mi aiuta a cambiare Python.

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

Eseguire setpy2prima di eseguire npm install. L'interruttore rimane attivo fino a quando non si esce dal terminale, quindi pythonviene riportato ai valori predefiniti del sistema.

Puoi utilizzare questa tecnica anche per qualsiasi altro comando / strumento.


@NasserTorabzade l'aliasing ha eseguito il lavoro o la soluzione in risposta?
Rafa

@rafee L'ho appena salvato per esigenze future, in realtà non è venuto a testarlo! spiacente!
Nasser Torabzade,

@NasserTorabzade Ho effettivamente chiesto se PYTHON = python2.7 era abbastanza buono, perché questa è una soluzione semplice e morta rispetto a quella che ho proposto.
Rafa

@rafee yes, PYTHON = python2.7 ha funzionato come un fascino! :)
Nasser Torabzade,

1

per una sola volta usa questo funziona, npm install --python = "c: \ python27"


0

Questo funziona meglio se non hai il pitone sul percorso o vuoi specificare la directory :

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

//for Linux
npm config set python /usr/bin/python27
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.