Menjalankan Python pada Windows untuk dependensi Node.js

226

Saya masuk ke basis kode Node.js yang mengharuskan saya mengunduh beberapa dependensi melalui NPM, yaitu jQuery.

Dalam mencoba menjalankan npm install jquery , saya terus mendapatkan kesalahan ini:

Your environment has been set up for using Node.js 0.8.21 (x64) and NPM

C:\Users\Matt Cashatt>npm install jquery
npm http GET https://registry.npmjs.org/jquery
npm http 304 https://registry.npmjs.org/jquery
npm http GET https://registry.npmjs.org/jsdom
npm http GET https://registry.npmjs.org/xmlhttprequest
npm http GET https://registry.npmjs.org/htmlparser/1.7.6
npm http GET https://registry.npmjs.org/location/0.0.1
npm http GET https://registry.npmjs.org/navigator
npm http GET https://registry.npmjs.org/contextify
npm http 304 https://registry.npmjs.org/htmlparser/1.7.6
npm http 304 https://registry.npmjs.org/xmlhttprequest
npm http 304 https://registry.npmjs.org/location/0.0.1
npm http 304 https://registry.npmjs.org/navigator
npm http 304 https://registry.npmjs.org/jsdom
npm http 304 https://registry.npmjs.org/contextify
npm http GET https://registry.npmjs.org/bindings
npm http GET https://registry.npmjs.org/cssom
npm http GET https://registry.npmjs.org/cssstyle
npm http GET https://registry.npmjs.org/request
npm http 304 https://registry.npmjs.org/bindings

> contextify@0.1.4 install C:\Users\Matt Cashatt\node_modules\jquery\node_module
s\contextify
> node-gyp rebuild


C:\Users\Matt Cashatt\node_modules\jquery\node_modules\contextify>node "C:\Progr
am Files\nodejs\node_modules\npm\bin\node-gyp-bin\\..\..\node_modules\node-gyp\b
in\node-gyp.js" rebuild
npm http 304 https://registry.npmjs.org/cssstyle
npm http 304 https://registry.npmjs.org/cssom
npm http 304 https://registry.npmjs.org/request
gyp ERR! configure error
gyp ERR! stack Error: Can't find Python executable "python", you can set the PYT
HON env variable.
gyp ERR! stack     at failNoPython (C:\Program Files\nodejs\node_modules\npm\nod
e_modules\node-gyp\lib\configure.js:113:14)
gyp ERR! stack     at C:\Program Files\nodejs\node_modules\npm\node_modules\node
-gyp\lib\configure.js:82:11
gyp ERR! stack     at Object.oncomplete (fs.js:297:15)
gyp ERR! System Windows_NT 6.1.7601
gyp ERR! command "node" "C:\\Program Files\\nodejs\\node_modules\\npm\\node_modu
les\\node-gyp\\bin\\node-gyp.js" "rebuild"
gyp ERR! cwd C:\Users\Matt Cashatt\node_modules\jquery\node_modules\contextify
gyp ERR! node -v v0.8.21
gyp ERR! node-gyp -v v0.8.4
gyp ERR! not ok
npm ERR! error rolling back Error: ENOTEMPTY, rmdir 'C:\Users\Matt Cashatt\node_
modules\jquery\node_modules\jsdom\node_modules\request\tests'
npm ERR! error rolling back  [email protected] { [Error: ENOTEMPTY, rmdir 'C:\Users\M
att Cashatt\node_modules\jquery\node_modules\jsdom\node_modules\request\tests']
npm ERR! error rolling back   errno: 53,
npm ERR! error rolling back   code: 'ENOTEMPTY',
npm ERR! error rolling back   path: 'C:\\Users\\Matt Cashatt\\node_modules\\jque
ry\\node_modules\\jsdom\\node_modules\\request\\tests' }
npm ERR! [email protected] install: `node-gyp rebuild`
npm ERR! `cmd "/c" "node-gyp rebuild"` failed with 1
npm ERR!
npm ERR! Failed at the [email protected] install script.
npm ERR! This is most likely a problem with the contextify package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR!     node-gyp rebuild
npm ERR! You can get their info via:
npm ERR!     npm owner ls contextify
npm ERR! There is likely additional logging output above.

npm ERR! System Windows_NT 6.1.7601
npm ERR! command "C:\\Program Files\\nodejs\\\\node.exe" "C:\\Program Files\\nod
ejs\\node_modules\\npm\\bin\\npm-cli.js" "install" "jquery"
npm ERR! cwd C:\Users\Matt Cashatt
npm ERR! node -v v0.8.21
npm ERR! npm -v 1.2.11
npm ERR! code ELIFECYCLE
npm ERR! Error: ENOENT, lstat 'C:\Users\Matt Cashatt\node_modules\jquery\node_mo
dules\jsdom\node_modules\request\tests\test-pipes.js'
npm ERR! If you need help, you may report this log at:
npm ERR!     <http://github.com/isaacs/npm/issues>
npm ERR! or email it to:
npm ERR!     <[email protected]>

npm ERR! System Windows_NT 6.1.7601
npm ERR! command "C:\\Program Files\\nodejs\\\\node.exe" "C:\\Program Files\\nod
ejs\\node_modules\\npm\\bin\\npm-cli.js" "install" "jquery"
npm ERR! cwd C:\Users\Matt Cashatt
npm ERR! node -v v0.8.21
npm ERR! npm -v 1.2.11
npm ERR! path C:\Users\Matt Cashatt\node_modules\jquery\node_modules\jsdom\node_
modules\request\tests\test-pipes.js
npm ERR! fstream_path C:\Users\Matt Cashatt\node_modules\jquery\node_modules\jsd
om\node_modules\request\tests\test-pipes.js
npm ERR! fstream_type File
npm ERR! fstream_class FileWriter
npm ERR! code ENOENT
npm ERR! errno 34
npm ERR! fstream_stack C:\Program Files\nodejs\node_modules\npm\node_modules\fst
ream\lib\writer.js:284:26
npm ERR! fstream_stack Object.oncomplete (fs.js:297:15)
npm ERR!
npm ERR! Additional logging details can be found in:
npm ERR!     C:\Users\Matt Cashatt\npm-debug.log
npm ERR! not ok code 0

C:\Users\Matt Cashatt>

Sepertinya kegagalan ini disebabkan oleh instalasi Python yang hilang. Yah, saya sudah menginstal Python, mengatur variabel, dan reboot dan masih kesalahan.

Adakah petunjuk tentang apa yang saya lewatkan?

Matt Cashatt
sumber
1
Bisakah Anda menempelkan teks sebagai teks, bukan gambar? Selain sulit dibaca (terutama karena tampaknya telah memperkecil font bitmap yang res rendah), itu juga tidak dapat disalin.
abarnert
1
Lebih penting: Bagaimana Anda mengatur variabel lingkungan sebelum me-reboot? Jika Anda baru saja melakukannya PYTHON=C:\Python27\Python.exedi jendela cmd dan reboot, pengaturannya hilang.
abarnert
7
Juga, versi Python mana yang Anda instal? Setidaknya waf dan gyp versi lama membutuhkan 2.x tetapi tidak mengatakan apa-apa tentang itu, dan akan memberikan semua jenis kesalahan misterius jika Anda menginstal 3.x sebagai gantinya.
abarnert
Terima kasih atas komentar anda Saya telah memposting kesalahan dalam format teks. Saya menggunakan v2.7
Matt Cashatt
OK, tapi tolong jawab pertanyaan "yang lebih penting", karena itu, seperti yang tersirat dalam teks, penting. Anda mungkin juga ingin menguji ini sendiri: Di cmd.exejendela, sebelum mencoba npmperintah, apakah memulai pythonatau %PYTHON%memulai interpreter Python? Jika tidak, Anda belum mengaturnya dengan benar.
abarnert

Jawaban:

132

Masalah Anda adalah Anda tidak menyetel variabel lingkungan.

Kesalahannya dengan jelas mengatakan ini:

gyp ERR! stack Error: Can't find Python executable "python", you can set the PYTHON env variable.

Dan dalam komentar Anda, Anda mengatakan Anda melakukan ini:

set PYTHONPATH=%PYTHONPATH%;C:\My_python_lib

Itu bagus, tetapi itu tidak mengatur PYTHONvariabel, itu mengatur PYTHONPATHvariabel.


Sementara itu, hanya menggunakan setperintah hanya memengaruhi cmdsesi saat ini . Jika Anda reboot setelah itu, seperti yang Anda katakan, Anda berakhir dengan cmdsesi baru yang tidak memiliki variabel yang ditetapkan di dalamnya.

Ada beberapa cara untuk mengatur variabel lingkungan secara permanen - yang paling mudah adalah di System Control Panel di XP, yang tentu saja berbeda di Vista, berbeda lagi di 7, dan berbeda lagi di 8, tetapi Anda bisa google untuk itu.

Atau, lakukan saja yang setbenar sebelum npmperintah, tanpa me-reboot di antaranya.


Anda dapat menguji apakah Anda telah melakukan hal-hal yang benar dengan melakukan hal yang persis sama dengan yang coba dilakukan skrip konfigurasi: Sebelum menjalankan npm, coba jalankan %PYTHON%. Jika Anda melakukannya dengan benar, Anda akan mendapatkan juru bahasa Python (yang dapat langsung Anda hentikan). Jika Anda mendapatkan kesalahan, Anda belum melakukannya dengan benar.


Ada dua masalah dengan ini:

set PYTHON=%PYTHON%;D:\Python

Pertama, Anda mengatur PYTHONuntuk ;D:\Python. Titik koma ekstra baik untuk daftar jalur yang dipisahkan titik koma, suka PATHatau PYTHONPATH, tetapi tidak untuk nilai tunggal suka PYTHON. Dan juga, menambahkan nilai baru ke nilai yang ada adalah apa yang Anda inginkan ketika Anda ingin menambahkan jalur lain ke daftar jalur, tetapi tidak untuk nilai tunggal. Jadi, kamu hanya mau set PYTHON=D:\Python.

Kedua, D:\Pythonbukan jalan menuju juru bahasa Python Anda. Itu seperti D:\Python\Python.exe, atau D:\Python\bin\Python.exe. Temukan jalur yang benar, pastikan itu bekerja dengan sendirinya (misalnya, ketik D:\Python\bin\Python.exedan pastikan Anda mendapatkan juru bahasa Python), lalu atur variabel dan gunakan.


Begitu:

set PYTHON=D:\Python\bin\Python.exe

Atau, jika Anda ingin membuatnya permanen, lakukan yang setara di Control Panel.

abarnert
sumber
1
OK, jadi saya mengerti: Microsoft Windows [Versi 6.1.7601] Hak Cipta (c) 2009 Microsoft Corporation. Seluruh hak cipta. C: \ Users \ Matt Cashatt> set PYTHON =% PYTHON%; D: \ Python C: \ Users \ Matt Cashatt>% PYTHON% '% PYTHON%' tidak dikenali sebagai perintah internal atau eksternal, program yang dapat dijalankan atau file batch . C: \ Users \ Matt Cashatt>
Matt Cashatt
1
Juga, Ddrive adalah tempat saya memiliki Python jika Anda bertanya-tanya. Sekali lagi terima kasih atas bantuan Anda.
Matt Cashatt
Bekerja seperti pesona, terima kasih! Untuk yang lain: Saya harus menjalankan setperintah di jendela perintah NPM untuk beberapa alasan dan kemudian menjalankan mpm install jqueryperintah setelah itu. Jika saya melakukannya secara terpisah, itu tidak berhasil karena suatu alasan.
Matt Cashatt
@ MatthewPatrickCashatt: Seperti yang saya jelaskan, setperintah hanya mempengaruhi cmdjendela saat ini , jadi Anda harus melakukannya sebelum menjalankan npmdi jendela yang sama. Jika Anda ingin mengatur variabel lingkungan lebih permanen, itu ada di System Control Panel, atau setara dengan versi Windows Anda.
abarnert
3
@abarnert adalah jawaban aktual untuk pertanyaan ini, kemudian setel PYTHON = D: \ Python \ bin \ Python.exe - akan sangat membantu jika Anda memberikan cara yang benar dan juga menjelaskan cara yang salah
reach4thelasers
449

Jika Anda belum menginstal python bersama semua dependensi node-gyp, cukup buka Powershell atau Git Bash dengan hak administrator dan jalankan:

npm install --global --production windows-build-tools

dan kemudian menginstal paket:

npm install --global node-gyp

setelah diinstal, Anda akan memiliki semua dependensi node-gyp diunduh, tetapi Anda masih memerlukan variabel lingkungan. Validasi Python memang ditemukan di folder yang benar:

C:\Users\ben\.windows-build-tools\python27\python.exe 

Catatan - ini menggunakan python 2.7 bukan 3.x karena tidak didukung

Jika tidak mengerang, silakan dan buat variabel lingkungan (pengguna) Anda:

setx PYTHON "%USERPROFILE%\.windows-build-tools\python27\python.exe"

restart cmd, dan verifikasi variabel ada via set PYTHON mana harus mengembalikan variabel

Terakhir mendaftar ulang npm install <module>

benscabbia
sumber
1
Saya mengalami beberapa kesalahan izin, tetapi berhasil menginstal python secara manual dari: C: \ Users [me] \. Windows-build-tools \ python.msi. Dalam instalasi ada opsi untuk menambahkannya ke path. (Restart cmd / PS) dan berhasil
d.raev
Saya mendapatkan kunci kesalahan dh terlalu kecil: openssk \ ssl \ s3_clnt, c: 3641
user1428716
14
Menginstal windows-build-tools diperlukan PowerShell dijalankan sebagai Admin pada Windows 10. Ini berarti perintah setx menjadisetx PYTHON $env:USERPROFILE\.windows-build-tools\python27\python.exe
Bae
Saya memang harus menjalankan perintah-perintah ini dalam prompt perintah yang ditinggikan, tetapi tampaknya telah bekerja. Secara manual menginstal Python 3.x dan mengatur variabel lingkungan PYTHON untuk menunjukkan bahwa itu tidak berfungsi. Saya menganggap kesalahan saya terkait dengan perbedaan dalam versi python? Bagaimanapun terima kasih!
JeffryHouser
16

Bagi saya setelah menginstal windows-build-tools dengan komentar di bawah ini

npm --add-python-to-path='true' --debug install --global windows-build-tools

menjalankan kode di bawah ini

npm config set python "%USERPROFILE%\.windows-build-tools\python27\python.exe"

telah bekerja.

Serhat Oz
sumber
Saya juga membutuhkan kedua langkah di atas. Saya juga akan menambahkan bahwa, bagi saya, (Windows 10 Pro 1803, node v10.15.3, npm v6.9.0) ketika saya menjalankan langkah pertama, langkah 'npm install windows-build-tools', instalasi yang sepertinya tidak pernah muncul lengkap, sepertinya akan berulang tanpa henti (memberi makan garis output yang sama ke konsol). Setelah menonton loop yang seolah tak berujung ini selama beberapa menit, saya memilih untuk menggunakan Ctrl + C untuk "mengakhiri pekerjaan batch". Semuanya berfungsi sebagaimana mestinya, mengganggu loop tampaknya tidak menjadi masalah.
StackOverflowUser
10

Satu dan / atau banyak dari itu akan membantu:

  1. Tambahkan C:\Python27\ke PATHvariabel Anda (mengingat Anda telah menginstal Python di direktori ini)
    Cara mengatur PATHvariabel env: http://www.computerhope.com/issues/ch000549.htm
    Mulai ulang konsol dan / atau Windows Anda setelah mengatur variabel.

  2. Di bagian yang sama seperti di atas ("Variabel Lingkungan"), tambahkan variabel baru dengan nama PYTHONdan nilai C:\Python27\python.exe
    Restart konsol Anda dan / atau Windows setelah pengaturan variabel.

  3. Buka baris perintah Windows ( cmd) dalam mode Admin .
    Ubah direktori ke jalur instalasi Python Anda: cd C:\Python27
    Buat symlink diperlukan untuk beberapa instalasi:mklink python2.7.exe python.exe

Harap dicatat bahwa Anda harus menjalankan Python 2.x, NOT 3.x , untuk dijalankannode-gyp instalasi berbasis!

Teks di bawah ini mengatakan tentang Unix, tetapi versi Windows juga memerlukan Python 2.x:

You can install with npm:

$ npm install -g node-gyp
You will also need to install:

On Unix:
python (v2.7 recommended, v3.x.x is not supported)
make
A proper C/C++ compiler toolchain, like GCC

Artikel ini juga dapat membantu: https://github.com/nodejs/node-gyp#installation

thybzi
sumber
8

Saya memiliki masalah yang sama dan tidak ada jawaban yang membantu. Dalam kasus saya variabel PYTHON diatur dengan benar. Namun python dipasang terlalu dalam, yaitu jalurnya terlalu panjang. Jadi, saya melakukan yang berikut:

  1. instal ulang python ke c: \ python
  2. setel variabel lingkungan PYTHON ke C: \ python \ python.exe

Dan itu dia!

zhekaus
sumber
7

Ini membantu: https://www.npmjs.com/package/node-gyp

Saya mengikuti langkah-langkah ini:

npm install -g node-gyp

kemudian:

npm install --global --production windows-build-tools
Peegee
sumber
npm install -g node-gyp sudah cukup
Chamin Thilakarathne
6

ada beberapa solusi untuk mengatasi masalah ini: 1) jalankan command prompt Anda sebagai "administrator".

jika solusi pertama tidak menyelesaikan masalah Anda coba yang ini:

2) buka prompt perintah sebagai administrator tempelkan baris kode berikut dan tekan enter:

npm install --global --production windows-build-tools
Pedram Rastegar
sumber
5

TL; DR Buat salinan atau alias dari python.exe Anda dengan nama python2.7.exe

Python 2.7 saya diinstal sebagai

D: \ app \ Python27 \ python.exe

Saya selalu mendapatkan kesalahan ini tidak peduli bagaimana saya mengatur (dan memverifikasi) variabel PYTHON env:

gyp ERR! stack Error: Tidak dapat menemukan eksekusi Python "python2.7", Anda dapat mengatur variabel env PYTHON.
gyp ERR! stack di failNoPython (C: \ Program Files \ nodejs \ node_modules \ npm \ node_modules \ node-gyp \ lib \ configure.js: 103: 14)

Alasan untuk ini adalah bahwa dalam configure.js node-gyp's executable python diselesaikan seperti:

var python = gyp.opts.python || process.env.PYTHON || 'python'

Dan ternyata gyp.opts.python memiliki nilai 'python2.7' sehingga mengesampingkan process.env.PYTHON.

Saya menyelesaikan ini dengan membuat alias untuk python.exe yang dapat dieksekusi dengan nama node-gyp cari:

D:\app\Python27>mklink python2.7.exe python.exe

Anda memerlukan hak admin untuk operasi ini.

iaarnio
sumber
5

Berikut ini bekerja untuk saya dari baris perintah sebagai admin:

Menginstal windows-build-tools (ini bisa memakan waktu 15-20 menit):

 npm --add-python-to-path='true' --debug install --global windows-build-tools

Menambah / memperbarui variabel lingkungan:

setx PYTHON "%USERPROFILE%\.windows-build-tools\python27\python.exe"

Menginstal node-gyp:

npm install --global node-gyp

Mengubah nama file exe dari Python ke Python2.7.

C:\Users\username\.windows-build-tools\python27\Python2.7

npm install module_name --save

Sikander
sumber
5

Ini adalah cara termudah untuk membiarkan NPM melakukan segalanya untuk Anda

npm --add-python-to-path='true' --debug install --global windows-build-tools
Ashish Gupta
sumber
4

Cara yang benar adalah 1) Unduh dan Instal python 2.7.14 dari sini . 2) Tetapkan variabel lingkungan untuk python dari sini .

selesai!

Catatan: Silakan setel variabel lingkungan sesuai. Saya jawab di sini untuk windows.

Herat Patel
sumber
4

Saya bertemu tantangan yang sama ketika mencoba untuk menginstal [email protected] .

Dan setelah melihat dokumentasi resmi saat ini, dan setelah membaca jawaban di atas, saya perhatikan bahwa Anda mungkin tidak perlu menginstal node-gyp atau menginstal alat windows-build. Inilah yang dikatakannya, di sini tentang menginstal node-gyp di windows . Ingat node-gyp terlibat dalam proses instalasi node-sass. Dan Anda tidak benar-benar harus menginstal ulang versi python lain.

Ini adalah penyelamat, konfigurasikan jalur python yang harus dicari oleh "npm" saat menginstal paket apa pun yang memerlukan alat bantu pembangunan.

C:\> npm config set python /Python36/python

Saya telah menginstal python3.6.3, di windows-7, di sana.

MwamiTovi
sumber
Solusi yang sama bekerja untuk saya saat menginstal [email protected], ketika saya beralih ke windows-10, menggunakan [email protected]dan[email protected]
MwamiTovi
Catatan yang Python36/pythonseharusnya menjadi path ke file executable python Anda.exe
MwamiTovi
Jika baru, goto di mana executable python Anda diinstal. Di windows , Tekan hold Shift, and Right-Clickdan masukkan ini:npm config set python
MwamiTovi
2

Mengapa tidak mengunduh penginstal python di sini ? Itu membuat pekerjaan untuk Anda ketika Anda memeriksa jalur instalasi

T-prod
sumber
2

Bagi saya, langkah-langkah ini memperbaiki masalah:

1- Menjalankan cmd ini sebagai admin:

npm install --global --production windows-build-tools

2- Kemudian berjalan npm rebuildsetelah langkah 1 selesai (terutama menyelesaikan instalasi python 2.7, yang merupakan penyebab utama masalah)

Ahmed Elkoussy
sumber
1

Berikut adalah perintah yang benar: set path =% path%; C: \ Python34 [Ganti dengan path yang benar untuk instalasi python Anda]

Saya memiliki masalah yang sama dan saya baru saja menyelesaikan ini.

Seperti beberapa orang lain tunjukkan, ini adalah konfigurasi yang mudah menguap, ini hanya berfungsi untuk sesi cmd saat ini, dan (jelas) Anda harus mengatur path Anda sebelum menjalankan npm install.

Saya harap ini membantu.

Projenix
sumber
1

gyp ERR! konfigurasikan galat gyp ERR! stack Error: Tidak dapat menemukan Python executable "python", Anda dapat mengatur variabel env PYT HON.

Tidak perlu menginstal ulang, pengecualian ini dibuang oleh skrip node-gyp, lalu coba untuk membangun kembali. Variabel lingkungan pengaturan cukup seperti dalam kasus saya yang saya lakukan:

SET PYTHON=C:\work\_env\Python27\python.exe
Y. Aliaksei
sumber
1

Jika Anda mencoba menggunakan ini di Cygwin, maka Anda harus mengikuti instruksi dalam jawaban ini . (Ini masalah bagaimana Cygwin memperlakukan Windows symlinks.)

emigenix
sumber
1

Contoh: pg_config tidak dapat dieksekusi / error node-gyp

Solusi: Di ​​windows coba tambahkan PATH Env -> C: \ Program Files \ PostgreSQL \ 12 \ bin

Bekerja untuk saya, Sekarang saya bisa menggunakan npm saya pg-janji misalnya atau dependensi lainnya.

P0y
sumber
Untuk pg-promiseAnda tidak perlu ini. Anda mungkin terjebak oleh ini . Cukup gunakan versi terbaru, dan Anda akan baik-baik saja, tidak perlu untuk hal-hal ekstra;)
vitaly-t
0

Bagi saya, masalahnya adalah saya menggunakan versi terbaru node dan bukan LTSversi yang merupakan versi stabil dan direkomendasikan untuk sebagian besar pengguna.
Menggunakan LTSVersi memecahkan masalah.
Anda dapat mengunduh dari sini:

Versi LTS

Versi Terbaru Saat Ini

Nurul Sundarani
sumber