Wie verwende ich eine andere Version von Python während der NPM-Installation?

218

Ich habe Terminalzugriff auf ein VPS mit Centos 5.9 und standardmäßig installiertem Python 2.4.3. Ich habe Python 2.7.3 auch über die folgenden Befehle installiert: (Ich habe make altinstallanstelle von verwendet 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

dann habe ich node.js von der Quelle über diese Befehle installiert:

python2.7 ./configure
make
make install

Das Problem ist, wenn ich npm installein node.js-Paket verwende und versuche, das Python> 2.4.3 benötigt, wird folgende Fehlermeldung angezeigt:

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

Wie soll ich "den Schalter --python übergeben, um auf Python> = v2.5.0 zu zeigen" ?

Nasser Torabzade
quelle
Ich würde einen Hack vorschlagen. Wie wäre es mit einem Aliasing dieser Python-Version in Ihrer Shell und nachdem Sie die Shell geschlossen haben, sollte das System zum vorherigen Status zurückkehren
Rafee
@rafee es ist toll, kannst du erklären, wie ich das machen kann? Ich bin ein bisschen neu in Centos!
Nasser Torabzade
Ich habe CentOS fast nie benutzt. Es sollte genau wie jede andere Linux-Distribution sein. Ich erzähle von einem vorübergehenden Verfahren, da ein dauerhafter Alias ​​Ihr System beschädigen kann. Das sollte also nicht gemacht werden.
Rafee
@rafee danke, ich werde deine Lösung überprüfen.
Nasser Torabzade
2
alias python = / path / to / python sollte gut genug sein. Aber seien Sie vorsichtig, wenn Sie die Änderung vorübergehend
vornehmen. Eine

Antworten:

499

Sie können die --pythonOption verwenden, um npm wie folgt zu erstellen:

npm install --python=python2.7

oder stellen Sie es so ein, dass es immer verwendet wird:

npm config set python python2.7

Npm übergibt diese Option bei Bedarf an Node-Gyp.

(Hinweis: Ich bin derjenige, der eine Ausgabe auf Github eröffnet hat, um dies in die Dokumentation aufzunehmen, da es so viele Fragen dazu gab ;-))

ack
quelle
35
Dies sollte die akzeptierte Antwort sein. npm config set python python2.7ist die endgültige Lösung
Alessandro Pezzato
Wenn eine Python 2-Version akzeptabel ist, kann man sie verwenden npm install --python=python2?
Freedom_Ben
1
Sicher, wenn python2es auf Ihrem $ PATH ist, verwenden Sie das auf jeden Fall :-)
ack
5
Für pyenvmit Python 3 habe ichnpm install --python=/usr/bin/python
Andrei
11
da ich python3 als global habe, muss ich auch python27 einrichten mit:> dieser npm config set python C: \ Python27 \ python.exe
francois
54

Setzen Sie Python auf python2.7, bevor Sie die npm-Installation ausführen

Linux:

export PYTHON=python2.7

Windows:

set PYTHON=python2.7
Sandtränen Kirisame
quelle
4
exportwird verwendet, um eine Umgebungsvariable
festzulegen
mein oder dieser? denn wenn meins funktioniert hätte, würde ich das als Antwort posten und das sollte als Antwort markiert werden
rafee
@rafee das hat funktioniert, ich habe deinen Vorschlag für zukünftige Bedürfnisse gespeichert, danke.
Nasser Torabzade
7
Verwendung set PYTHON=python2.7unter Windows
Zacharyliu
1
Dies ist eine schlechte Idee, wenn eine bestimmte Python3-Umgebung geladen sein muss. python2.7 wird in diesem Fall nur für npm verwendet. Stellen Sie es daher nur für npm ein und nicht für Ihre gesamte Shell-Umgebung, ohne zu wissen, was Sie tun.
Ohcibi
34

Für Windows-Benutzer sollte so etwas funktionieren:

PS C:\angular> npm install --python=C:\Python27\python.exe
Dave L.
quelle
7
Dies kann mit der akzeptierten Antwort kombiniert werden mit: npm config set python C:\Python27\python.exe- Ich habe dies gerade getan und es hat gut funktioniert, was bedeutet, dass Sie es nicht jedes Mal tun müssen, wenn Sie etwas installieren möchten.
Nathan Ridley
7

Ok, Sie haben also bereits eine Lösung gefunden. Ich wollte nur mitteilen, was mir so oft nützlich war.

Ich habe einen setpy2Alias erstellt, mit dem ich Python wechseln kann.

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

setpy2Vor dem Ausführen ausführen npm install. Der Schalter bleibt wirksam, bis Sie das Terminal verlassen, und wird anschließend pythonauf den Systemstandard zurückgesetzt.

Sie können diese Technik auch für jeden anderen Befehl / jedes andere Werkzeug verwenden.

vmx
quelle
@NasserTorabzade Hat Aliasing den Job oder die Lösung als Antwort ausgeführt?
Rafee
@rafee Habe es gerade für zukünftige Bedürfnisse gespeichert und bin nicht gekommen, um es zu testen! Es tut uns leid!
Nasser Torabzade
@NasserTorabzade Ich habe tatsächlich gefragt, ob PYTHON = python2.7 gut genug ist, weil das eine absolut einfache Lösung ist, als ich vorgeschlagen habe.
Rafee
@rafee ja, PYTHON = python2.7 hat wie ein Zauber funktioniert! :)
Nasser Torabzade
1

Für eine schnelle einmalige Verwendung funktioniert dies. Npm install --python = "c: \ python27"

MPV
quelle
0

Dieser funktioniert besser, wenn Sie die Python nicht im Pfad haben oder das Verzeichnis angeben möchten :

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

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