Bagaimana cara menggunakan versi python yang berbeda selama instalasi NPM?

218

Saya memiliki akses terminal ke VPS yang menjalankan centos 5.9 dan default python 2.4.3 diinstal. Saya juga menginstal python 2.7.3 melalui perintah ini: (Saya menggunakan make altinstallbukan 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

kemudian saya menginstal node.js dari sumber melalui perintah-perintah ini:

python2.7 ./configure
make
make install

Masalahnya adalah, ketika saya menggunakan npm installdan mencoba untuk menginstal paket node.js yang membutuhkan python> 2.4.3 saya mendapatkan kesalahan ini:

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

bagaimana seharusnya saya "meneruskan saklar --python untuk menunjuk ke Python> = v2.5.0" ?

Nasser Torabzade
sumber
Saya akan mengusulkan retas. Bagaimana dengan aliasing versi python ini di dalam shell Anda & kemudian setelah Anda menutup shell, sistem harus kembali ke keadaan sebelumnya
rafee
@rafee itu hebat, bisakah Anda menjelaskan bagaimana saya bisa melakukan itu? Saya agak baru untuk centos!
Nasser Torabzade
Saya hampir tidak pernah menggunakan CentOS. Seharusnya sama seperti distribusi linux lainnya. Saya mengatakan tentang prosedur sementara, karena membuat alias permanen dapat merusak sistem Anda. Jadi itu tidak boleh dilakukan.
rafee
@rafee terima kasih, saya akan memeriksa solusi Anda.
Nasser Torabzade
2
alias python = / path / ke / python harus cukup baik. Tapi hati-hati tentang membuat perubahan sementara, perubahan permanen dapat membahayakan sistem Anda
rafee

Jawaban:

499

Anda dapat menggunakan --pythonopsi untuk npm seperti:

npm install --python=python2.7

atau atur agar selalu digunakan:

npm config set python python2.7

Npm pada gilirannya akan meneruskan opsi ini ke node-gyp bila diperlukan.

(catatan: Saya orang yang membuka masalah pada Github untuk memasukkan ini ke dalam dokumen, karena ada begitu banyak pertanyaan tentang hal itu ;-))

ack
sumber
35
Ini harus menjadi jawaban yang diterima. npm config set python python2.7adalah solusi pasti
Alessandro Pezzato
Jika ada versi Python 2 yang dapat diterima, dapatkah digunakan npm install --python=python2?
Freedom_Ben
1
Tentu, jika python2ada di $ PATH Anda, gunakan itu, dengan segala cara :-)
ack
5
Untuk pyenvdengan Python 3, saya telah menggunakannpm install --python=/usr/bin/python
Andrei
11
karena saya memiliki python3 sebagai global, saya perlu mengatur juga python27 menggunakan:> konfigurasi npm ini mengatur python C: \ Python27 \ python.exe
francois
54

atur python ke python2.7 sebelum menjalankan npm install

Linux:

export PYTHON=python2.7

Windows:

set PYTHON=python2.7
Sandtears Kirisame
sumber
4
exportdigunakan untuk mengatur variabel lingkungan, dan variabel tersebut bekerja pada shell Anda dan proses anaknya ..
Sandtears Kirisame
satu atau yang ini? karena jika salah satu saya berhasil, maka saya akan mempostingnya sebagai jawaban & yang harus ditandai sebagai jawaban
rafee
@rafee yang ini berfungsi, saya menyimpan saran Anda untuk kebutuhan masa depan, terima kasih.
Nasser Torabzade
7
gunakan set PYTHON=python2.7pada Windows
zacharyliu
1
Ini adalah ide yang buruk ketika perlu bahwa ada lingkungan python3 tertentu dimuat. python2.7 hanya digunakan untuk npm dalam kasus ini, jadi tetapkan saja untuk npm dan bukan untuk seluruh lingkungan shell Anda tanpa mengetahui apa yang Anda lakukan.
ohcibi
34

Untuk pengguna Windows sesuatu seperti ini seharusnya berfungsi:

PS C:\angular> npm install --python=C:\Python27\python.exe
Dave L.
sumber
7
Ini dapat dikombinasikan dengan jawaban yang diterima menggunakan: npm config set python C:\Python27\python.exe- Saya baru saja melakukan ini dan itu berfungsi dengan baik, yang berarti tidak harus melakukannya setiap kali Anda ingin menginstal sesuatu.
Nathan Ridley
7

Ok, jadi Anda sudah menemukan solusi. Hanya ingin berbagi apa yang bermanfaat bagi saya berkali-kali;

Saya telah membuat setpy2alias yang membantu saya mengganti python.

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

Jalankan setpy2sebelum Anda menjalankan npm install. Sakelar tetap berlaku sampai Anda keluar dari terminal, setelah pythonitu diatur kembali ke default sistem.

Anda dapat menggunakan teknik ini untuk perintah / alat lain juga.

vmx
sumber
@NasserTorabzade apakah aliasing melakukan pekerjaan atau solusi sebagai jawaban?
rafee
@rafee Hanya menyimpannya untuk kebutuhan masa depan, tidak benar-benar datang untuk mengujinya! Maaf!
Nasser Torabzade
@NasserTorabzade Saya sebenarnya bertanya apakah PYTHON = python2.7 cukup baik, karena itu adalah solusi sederhana yang mati daripada apa yang saya usulkan.
rafee
@rafee ya, PYTHON = python2.7 bekerja seperti pesona! :)
Nasser Torabzade
1

untuk penggunaan cepat sekali ini berfungsi, instal npm --python = "c: \ python27"

MPV
sumber
0

Yang ini berfungsi lebih baik jika Anda tidak memiliki python di jalur atau ingin menentukan direktori :

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

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