Jak korzystać z innej wersji Pythona podczas instalacji NPM?

218

Mam dostęp terminalu do VPS z uruchomionym centos 5.9 i domyślnym pythonem 2.4.3. Zainstalowałem również Python 2.7.3 za pomocą tych poleceń: (użyłem make altinstallzamiast 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

następnie zainstalowałem node.js ze źródła za pomocą tych poleceń:

python2.7 ./configure
make
make install

Problem polega na tym, że kiedy używam npm installi próbuję zainstalować pakiet node.js, który wymaga Pythona> 2.4.3, pojawia się ten błąd:

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

jak powinienem „przekazać przełącznik --python, aby wskazywał na Python> = v2.5.0” ?

Nasser Torabzade
źródło
Proponuję hack. Co powiesz na aliasing tej wersji Pythona w powłoce, a następnie po zamknięciu powłoki system powinien powrócić do poprzedniego stanu
rafee
@rafee to świetnie, czy możesz wyjaśnić, jak to zrobić? Jestem trochę nowy w centos!
Nasser Torabzade,
Prawie nigdy nie korzystałem z CentOS. Powinno być tak jak każda inna dystrybucja linuksowa. Mówię o tymczasowej procedurze, ponieważ uczynienie aliasu trwałym może uszkodzić twój system. To nie powinno być zrobione.
rafee
@rafee dzięki, sprawdzę twoje rozwiązanie.
Nasser Torabzade,
2
alias python = / path / to / python powinien być wystarczająco dobry. Ale uważaj, aby zmiana ta była tymczasowa, stała zmiana może zaszkodzić Twojemu systemowi
rafee

Odpowiedzi:

500

Możesz użyć --pythonopcji npm, aby:

npm install --python=python2.7

lub ustaw, aby zawsze był używany:

npm config set python python2.7

Npm z kolei przekaże tę opcję do węzła-gyp, jeśli zajdzie taka potrzeba.

(uwaga: to ja otworzyłem problem na Githubie, aby uwzględnić go w dokumentacji, ponieważ było tak wiele pytań na ten temat ;-))

ack
źródło
35
To powinna być zaakceptowana odpowiedź. npm config set python python2.7jest ostatecznym rozwiązaniem
Alessandro Pezzato
Jeśli jakakolwiek wersja Python 2 jest akceptowalna, czy można jej użyć npm install --python=python2?
Freedom_Ben
1
Jasne, jeśli python2jest na twojej ŚCIEŻCE $, skorzystaj z niej za wszelką cenę :-)
ack
5
Do pyenvPythona 3 użyłemnpm install --python=/usr/bin/python
Andrei
11
jak mam python3 jako globalny, trzeba skonfigurować również python27 użyciu:> ten zestaw konfiguracyjny npm Pythona C: \ Python27 \ python.exe
Francois
54

ustaw Python na python2.7 przed uruchomieniem instalacji npm

Linux:

export PYTHON=python2.7

Windows:

set PYTHON=python2.7
Sandtears Kirisame
źródło
4
exportsłuży do ustawienia zmiennej środowiskowej, która działa na twoją powłokę i proces potomny.
Sandtears Kirisame
mój czy ten? bo jeśli mój zadziałał, to opublikowałbym to jako odpowiedź i to powinno być oznaczone jako odpowiedź
rafee
@rafee ten działał, zapisałem twoją sugestię na przyszłe potrzeby, dzięki.
Nasser Torabzade
7
używać set PYTHON=python2.7w systemie Windows
zacharyliu
1
Jest to zły pomysł, gdy konieczne jest załadowanie określonego środowiska python3. w tym przypadku python2.7 jest używany tylko dla npm, więc ustaw go tylko dla npm, a nie dla całego środowiska powłoki, nie wiedząc, co robisz.
ohcibi,
34

Dla użytkowników systemu Windows coś takiego powinno działać:

PS C:\angular> npm install --python=C:\Python27\python.exe
Dave L.
źródło
7
Można to połączyć z zaakceptowaną odpowiedzią, używając: npm config set python C:\Python27\python.exe- Właśnie to zrobiłem i działało dobrze, co oznacza, że ​​nie trzeba tego robić za każdym razem, gdy chcesz coś zainstalować.
Nathan Ridley,
7

Ok, więc już znalazłeś rozwiązanie. Chciałem tylko podzielić się tym, co było dla mnie tak wiele razy;

Utworzyłem setpy2alias, który pomaga mi przełączać Pythona.

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

Wykonaj setpy2przed uruchomieniem npm install. Przełącznik działa, dopóki nie wyjdziesz z terminala, po czym pythonzostanie przywrócony domyślny system.

Możesz skorzystać z tej techniki również dla dowolnego innego polecenia / narzędzia.

VMX
źródło
@NasserTorabzade, czy aliasing wykonał zadanie lub rozwiązanie w odpowiedzi?
rafee
@rafee Właśnie zapisałem go na przyszłe potrzeby, tak naprawdę nie przyszedłem go przetestować! Przepraszam!
Nasser Torabzade,
@NasserTorabzade, o które pytałem, czy PYTHON = python2.7 było wystarczająco dobre, ponieważ jest to bardzo proste rozwiązanie niż to, co zaproponowałem.
rafee
@rafee tak, PYTHON = python2.7 działał jak urok! :)
Nasser Torabzade,
1

dla szybkiego jednorazowego użycia to działa, npm install --python = "c: \ python27"

MPV
źródło
0

Ten działa lepiej, jeśli nie masz Pythona na ścieżce lub chcesz określić katalog :

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

//for Linux
npm config set python /usr/bin/python27
olu mide
źródło