Chạy Python trên Windows cho các phụ thuộc Node.js


226

Tôi đang truy cập vào một cơ sở mã Node.js yêu cầu tôi tải xuống một vài phụ thuộc thông qua NPM, cụ thể là jQuery.

Trong khi cố gắng chạy npm install jquery, tôi tiếp tục gặp lỗi này:

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  jquery@1.8.3 { [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! contextify@0.1.4 install: `node-gyp rebuild`
npm ERR! `cmd "/c" "node-gyp rebuild"` failed with 1
npm ERR!
npm ERR! Failed at the contextify@0.1.4 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!     <npm-@googlegroups.com>

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>

Có vẻ như lỗi là do cài đặt Python bị thiếu. Vâng, tôi đã cài đặt Python, đặt biến và khởi động lại và vẫn còn lỗi.

Có manh mối nào về những gì tôi đang thiếu không?


1
Bạn có thể dán văn bản dưới dạng văn bản, thay vì một hình ảnh? Bên cạnh việc khó đọc (đặc biệt là vì nó rõ ràng đã thu nhỏ các phông chữ bitmap có độ phân giải thấp), nó không thể sao chép được.
abarnert

1
Quan trọng hơn: Làm thế nào bạn thiết lập biến môi trường trước khi khởi động lại? Nếu bạn vừa thực hiện PYTHON=C:\Python27\Python.exetrong cửa sổ cmd và khởi động lại, cài đặt sẽ bị mất.
abarnert

7
Ngoài ra, bạn đã cài đặt phiên bản Python nào? Ít nhất các phiên bản cũ hơn của waf và gyp yêu cầu 2.x nhưng không nói gì về nó và sẽ đưa ra tất cả các loại lỗi bí ẩn nếu bạn cài đặt 3.x thay thế.
abarnert

Cảm ơn ý kiến ​​của bạn. Tôi đã đăng lỗi ở định dạng văn bản. Tôi đang sử dụng v2.7
Matt Cashatt

OK, nhưng vui lòng trả lời câu hỏi "quan trọng hơn", bởi vì đó là, như văn bản ngụ ý, quan trọng. Bạn cũng có thể muốn tự kiểm tra điều này: Trong cmd.execửa sổ, trước khi thử npmlệnh, có pythonhoặc %PYTHON%bắt đầu trình thông dịch Python không? Nếu không, bạn đã không thiết lập nó đúng.
abarnert

Câu trả lời:


132

Vấn đề của bạn là bạn đã không đặt biến môi trường.

Lỗi nói rõ điều này:

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

Và trong bình luận của bạn, bạn nói rằng bạn đã làm điều này:

set PYTHONPATH=%PYTHONPATH%;C:\My_python_lib

Điều đó thật tuyệt, nhưng điều đó không đặt PYTHONbiến, nó đặt PYTHONPATHbiến.


Trong khi đó, chỉ sử dụng setlệnh chỉ ảnh hưởng đến cmdphiên hiện tại . Nếu bạn khởi động lại sau đó, như bạn nói, bạn đã kết thúc với một cmdphiên hoàn toàn mới không có biến đó được đặt trong đó.

Có một số cách để đặt các biến môi trường vĩnh viễn, đơn giản nhất là trong Bảng điều khiển hệ thống trong XP, tất nhiên là khác nhau trong Vista, khác nhau ở 7 và khác nhau ở 8, nhưng bạn có thể google cho nó.

Ngoài ra, chỉ cần làm setđúng trước npmlệnh, mà không cần khởi động lại ở giữa.


Bạn có thể kiểm tra xem bạn đã thực hiện đúng hay chưa bằng cách thực hiện chính xác điều tương tự mà tập lệnh cấu hình đang cố thực hiện: Trước khi chạy npm, hãy thử chạy %PYTHON%. Nếu bạn đã thực hiện đúng, bạn sẽ nhận được trình thông dịch Python (bạn có thể thoát ngay lập tức). Nếu bạn gặp lỗi, bạn đã không làm đúng.


Có hai vấn đề này:

set PYTHON=%PYTHON%;D:\Python

Trước tiên, bạn đang thiết PYTHONđể ;D:\Python. Dấu chấm phẩy bổ sung đó là tốt cho một danh sách các đường dẫn được phân tách bằng dấu chấm phẩy, giống như PATHhoặc PYTHONPATH, nhưng không phải cho một giá trị như PYTHON. Và tương tự, thêm một giá trị mới vào giá trị hiện tại là những gì bạn muốn khi bạn muốn thêm một đường dẫn khác vào danh sách các đường dẫn, nhưng không phải cho một giá trị duy nhất. Vì vậy, bạn chỉ muốn set PYTHON=D:\Python.

Thứ hai, D:\Pythonkhông phải là đường dẫn đến trình thông dịch Python của bạn. Đó là một cái gì đó như D:\Python\Python.exe, hoặc D:\Python\bin\Python.exe. Tìm đúng đường dẫn, đảm bảo nó tự hoạt động (ví dụ: nhập D:\Python\bin\Python.exevà đảm bảo bạn nhận được trình thông dịch Python), sau đó đặt biến và sử dụng nó.


Vì thế:

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

Hoặc, nếu bạn muốn làm cho nó vĩnh viễn, hãy thực hiện tương đương trong Bảng điều khiển.


1
OK, vì vậy tôi nhận được điều này: Microsoft Windows [Phiên bản 6.1.7601] Bản quyền (c) 2009 Microsoft Corporation. Đã đăng ký Bản quyền. C: \ Users \ Matt Cashatt> đặt PYTHON =% PYTHON%; D: \ Python C: \ Users \ Matt Cashatt>% PYTHON% '% PYTHON%' không được nhận dạng dưới dạng lệnh nội bộ hoặc bên ngoài, tệp chương trình hoạt động hoặc tệp bó . C: \ Users \ Matt Cashatt>
Matt Cashatt

1
Ngoài ra, Dổ đĩa là nơi tôi có Python trong trường hợp bạn đang tự hỏi. Cảm ơn một lần nữa vì sự giúp đỡ của bạn.
Matt Cashatt

Làm việc như một cơ duyên, cảm ơn! Đối với những người khác: Tôi đã phải chạy setlệnh trong cửa sổ lệnh NPM vì một số lý do và sau đó chạy mpm install jquerylệnh ngay sau đó. Nếu tôi làm riêng chúng thì nó không hoạt động vì một số lý do.
Matt Cashatt

@MatthewPatrickCashatt: Như tôi đã giải thích, setlệnh chỉ ảnh hưởng đến cmdcửa sổ hiện tại , vì vậy bạn phải thực hiện trước khi chạy npmtrong cùng một cửa sổ. Nếu bạn muốn đặt các biến môi trường vĩnh viễn hơn, đó là trong Bảng điều khiển hệ thống hoặc tương đương với phiên bản Windows của bạn.
abarnert

3
@abarnert là câu trả lời thực sự cho câu hỏi này, sau đó đặt PYTHON = D: \ Python \ bin \ Python.exe - sẽ hữu ích nếu bạn đưa ra cách chính xác cũng như giải thích sai cách
Reach4thelasers 10/214

449

Nếu bạn chưa cài đặt python cùng với tất cả các phụ thuộc nút-gyp, chỉ cần mở Powershell hoặc Git Bash với các đặc quyền của quản trị viên và thực thi:

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

và sau đó để cài đặt gói:

npm install --global node-gyp

Sau khi cài đặt, bạn sẽ có tất cả các phụ thuộc nút-gyp được tải xuống, nhưng bạn vẫn cần biến môi trường. Xác thực Python thực sự được tìm thấy trong thư mục chính xác:

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

Lưu ý - nó sử dụng python 2.7 chứ không phải 3.x vì nó không được hỗ trợ

Nếu nó không rên rỉ, hãy tiếp tục và tạo biến môi trường (người dùng) của bạn:

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

khởi động lại cmd và xác minh biến tồn tại thông qua set PYTHONđó sẽ trả về biến

Áp dụng lại lần cuối npm install <module>


1
Tôi đã gặp một số lỗi về quyền, nhưng đã quản lý để cài đặt thủ công python từ: C: \ Users [me] \. Windows-build-tools \ python.msi. Trong cài đặt là một tùy chọn để thêm nó vào đường dẫn. (Khởi động lại cmd / PS) và nó đã hoạt động
d.raev

Tôi nhận được khóa dh lỗi quá nhỏ: openssk \ ssl \ s3_clnt, c: 3641
user1428716

14
Cài đặt windows-build-tools yêu cầu PowerShell chạy với tư cách Quản trị viên trên Windows 10. Điều này có nghĩa là lệnh setx trở thànhsetx PYTHON $env:USERPROFILE\.windows-build-tools\python27\python.exe
Bae

Tôi đã phải chạy các lệnh này trong một dấu nhắc lệnh nâng cao, nhưng dường như nó đã hoạt động. Cài đặt thủ công Python 3.x và đặt biến môi trường PYTHON để trỏ đến đó không hoạt động. Tôi giả sử lỗi của tôi liên quan đến sự khác biệt trong phiên bản python? Cảm ơn bất kể!
JeffryHouser

16

Đối với tôi sau khi cài đặt windows-build-tools với nhận xét bên dưới

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

chạy mã dưới đây

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

đã làm việc.


Tôi cũng cần cả hai bước trên. Tôi cũng sẽ thêm rằng, đối với tôi, (Windows 10 Pro 1803, nút v10.15.3, npm v6.9.0) khi tôi chạy bước đầu tiên, bước 'npm cài đặt windows-build-tools', cài đặt đó dường như chưa bao giờ hoàn thành, nó dường như được lặp đi lặp lại vô tận (cung cấp lại các dòng đầu ra tương tự cho bàn điều khiển). Sau khi xem vòng lặp dường như vô tận này trong một vài phút, tôi đã chọn sử dụng Ctrl + C để "kết thúc công việc hàng loạt". Mọi thứ hoạt động như dự định, làm gián đoạn vòng lặp dường như không phải là vấn đề.
StackOverflowUser


10

Một và / hoặc nhiều trong số đó sẽ giúp:

  1. Thêm C:\Python27\vào PATHbiến của bạn (xem xét bạn đã cài đặt Python trong thư mục này)
    Cách đặt PATHbiến env: http://www.computerhope.com/issues/ch000549.htm
    Khởi động lại bàn điều khiển và / hoặc Windows của bạn sau khi cài đặt biến.

  2. Trong cùng một phần như trên ("Biến môi trường"), thêm biến mới có tên PYTHONvà giá trị C:\Python27\python.exe
    Khởi động lại bàn điều khiển và / hoặc Windows của bạn sau khi đặt biến.

  3. Mở dòng lệnh Windows ( cmd) trong chế độ Quản trị viên .
    Thay đổi thư mục thành đường dẫn cài đặt Python của bạn: cd C:\Python27
    Tạo liên kết tượng trưng cần thiết cho một số cài đặt:mklink python2.7.exe python.exe

Xin lưu ý rằng bạn nên có Python 2.x, KHÔNG 3.x , để chạy các node-gypcài đặt dựa trên!

Văn bản dưới đây nói về Unix, nhưng phiên bản Windows cũng yêu cầu 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

Bài viết này cũng có thể giúp: https://github.com/nodejs/node-gyp#installation


8

Tôi đã có cùng một vấn đề và không có câu trả lời nào trong số này giúp được. Trong trường hợp của tôi, biến PYTHON được đặt chính xác. Tuy nhiên python đã được cài đặt quá sâu, tức là có đường dẫn quá dài. Vì vậy, tôi đã làm như sau:

  1. cài đặt lại python vào c: \ python
  2. đặt biến môi trường PYTHON thành C: \ python \ python.exe

Và đó là nó!



6

có một số giải pháp để giải quyết vấn đề này: 1) chạy dấu nhắc lệnh của bạn với tư cách là "quản trị viên".

Nếu giải pháp đầu tiên không giải quyết được vấn đề của bạn, hãy thử giải pháp này:

2) mở một dấu nhắc lệnh khi quản trị viên dán dòng mã sau và nhấn enter:

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

5

TL; DR Tạo một bản sao hoặc bí danh của python.exe của bạn với tên python2.7.exe

Con trăn 2.7 của tôi đã được cài đặt là

D: \ app \ Python27 \ python.exe

Tôi luôn gặp lỗi này cho dù tôi đã đặt (và xác minh) biến env PYTHON như thế nào:

gyp ERR! Lỗi stack: Không thể tìm thấy Python "python2.7", bạn có thể đặt biến env PYTHON.
gyp ERR! ngăn xếp tại failNoPython (C: \ Program Files \ nodejs \ node_modules \ npm \ node_modules \ node-gyp \ lib \ configure.js: 103: 14)

Lý do cho điều này là vì trong tệp config.js của nút-gyp, tệp thực thi python đã được giải quyết như sau:

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

Và hóa ra gyp.opts.python có giá trị 'python2.7' do đó ghi đè quá trình.env.PYTHON.

Tôi đã giải quyết điều này bằng cách tạo một bí danh cho python.exe có thể thực thi được với tên node-gyp đang tìm kiếm:

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

Bạn cần quyền quản trị cho hoạt động này.


5

Sau đây làm việc cho tôi từ dòng lệnh là quản trị viên:

Cài đặt windows-build-tools (quá trình này có thể mất 15-20 phút):

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

Thêm / cập nhật biến môi trường:

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

Cài đặt nút-gyp:

npm install --global node-gyp

Thay đổi tên của tệp exe từ Python thành Python2.7.

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

npm install module_name --save



5

Đây là cách dễ nhất để NPM làm mọi thứ cho bạn

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

4

Cách đúng là 1) Tải xuống và Cài đặt python 2.7,14 từ đây . 2) Đặt biến môi trường cho python từ đây .

làm xong!

lưu ý: Vui lòng đặt biến môi trường cho phù hợp. Tôi đã trả lời ở đây cho các cửa sổ.


4

Tôi đã gặp thử thách tương tự trong khi cố gắng cài đặt node-sass@4.9.4 .

Và sau khi xem tài liệu chính thức hiện tại và đọc các câu trả lời ở trên, tôi nhận thấy rằng bạn có thể không nhất thiết phải cài đặt nút-gyp cũng như không cài đặt các công cụ xây dựng windows. Đây là những gì nó nói, ở đây về việc cài đặt nút-gyp trên windows . Hãy nhớ nút-gyp có liên quan đến quá trình cài đặt của nút-sass. Và bạn không thực sự phải cài đặt lại một phiên bản python khác.

Đây là vị cứu tinh, định cấu hình đường dẫn python mà "npm" nên tìm trong khi cài đặt bất kỳ gói nào yêu cầu công cụ xây dựng.

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

Tôi đã cài đặt python3.6.3, trên windows-7, ở đó.


Cùng một giải pháp cho tôi khi cài đặt node-sass@4.9.4, khi tôi chuyển sang windows-10, sử dụng node@10.6.3yarn@1.19.1
MwamiTovi

Lưu ý rằng đó Python36/pythonphải là đường dẫn đến tệp thực thi python của bạn.exe
MwamiTovi

Nếu mới, goto nơi thực thi python của bạn đã được cài đặt. Trong cửa sổ , Bấm hold Shift, and Right-Clickvà nhập vào đây:npm config set python
MwamiTovi

2

Tại sao không tải xuống trình cài đặt python ở đây ? Nó làm việc cho bạn khi bạn kiểm tra cài đặt đường dẫn


2

Đối với tôi, các bước này đã khắc phục sự cố:

1- Chạy cmd này với tư cách quản trị viên:

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

2- Sau đó chạy npm rebuildsau khi hoàn thành bước 1 (đặc biệt là hoàn thành cài đặt python 2.7, đây là nguyên nhân chính của sự cố)


1

Đây là lệnh chính xác: set path =% path%; C: \ Python34 [Thay thế bằng đường dẫn chính xác của cài đặt python của bạn]

Tôi đã có cùng một vấn đề và tôi chỉ giải quyết như vậy.

Như một số người khác đã chỉ ra, đây là cấu hình không ổn định, nó chỉ hoạt động cho phiên cmd hiện tại và (rõ ràng) bạn phải đặt đường dẫn của mình trước khi chạy cài đặt npm.

Tôi hi vọng cái này giúp được.


1

gyp ERR! cấu hình lỗi gyp ERR! Lỗi stack: Không thể tìm thấy "python" thực thi Python, bạn có thể đặt biến env PYT HON.

Không cần thiết phải cài đặt lại, ngoại lệ này được ném bởi tập lệnh nút-gyp, sau đó thử xây dựng lại. Nó đủ biến môi trường thiết lập như trong trường hợp của tôi, tôi đã làm:

SET PYTHON=C:\work\_env\Python27\python.exe

1

Nếu bạn đang cố gắng sử dụng điều này trên Cygwin, thì bạn cần làm theo hướng dẫn trong câu trả lời này . (Đây là vấn đề làm thế nào Cygwin xử lý các liên kết tượng trưng của Windows.)


1

Ví dụ: pg_config không thực thi / lỗi nút-gyp

Giải pháp: Trên các cửa sổ, chỉ cần cố gắng thêm PATH Env -> C: \ Chương trình tập tin \ PostgreQuery \ 12 \ bin

Làm việc cho tôi, Bây giờ tôi có thể sử dụng npm i pg-hứa chẳng hạn hoặc các phụ thuộc khác.


Đối với pg-promisebạn không cần điều này. Bạn có thể đã bị bắt bởi điều này . Chỉ cần sử dụng phiên bản mới nhất, và bạn sẽ ổn, không cần bất kỳ nội dung bổ sung nào;)
Vitaly-t

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.