Uruchamianie Pythona w systemie Windows dla zależności Node.js

226

Wchodzę w bazę kodu Node.js, która wymaga pobrania kilku zależności za pośrednictwem NPM, a mianowicie jQuery.

Podczas próby uruchomienia npm install jquerypojawia się ten błąd:

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>

Wygląda na to, że przyczyną niepowodzenia jest brakująca instalacja Pythona. Cóż, zainstalowałem Python, ustawiłem zmienną, zrestartowałem i nadal występuje błąd.

Masz jakieś wskazówki co do tego, czego mi brakuje?

Matt Cashatt
źródło
1
Czy możesz wkleić tekst jako tekst zamiast obrazu? Oprócz tego, że jest trudny do odczytania (zwłaszcza, że ​​najwyraźniej jest pomniejszany i tak już o niskiej rozdzielczości czcionek bitmapowych), nie można go kopiować.
abarnert
1
Co ważniejsze: jak ustawiłeś zmienną środowiskową przed ponownym uruchomieniem? Jeśli zrobiłeś to PYTHON=C:\Python27\Python.exew oknie cmd i uruchomiłeś ponownie, ustawienie zostało utracone.
abarnert
7
Którą wersję Pythona zainstalowałeś? Przynajmniej starsze wersje waf i gyp wymagały wersji 2.x, ale nic o tym nie mówiły i dawałyby wszelkiego rodzaju tajemnicze błędy, gdyby zamiast tego zainstalowano wersję 3.x.
abarnert
Dziękuję za komentarze. Błąd został opublikowany w formacie tekstowym. Używam v2.7
Matt Cashatt
OK, ale proszę odpowiedz na pytanie „ważniejsze”, ponieważ jest to, jak sugeruje tekst, ważne. Można też przetestować ten sam: W cmd.exeoknie, przed skorzystaniem z npmpolecenia, czy też pythonczy %PYTHON%uruchomić interpreter Pythona? Jeśli nie, nie skonfigurowałeś go poprawnie.
abarnert

Odpowiedzi:

132

Twój problem polega na tym, że tego nie zrobiłeś ustawiłeś zmiennej środowiskowej.

Błąd wyraźnie mówi:

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

W swoim komentarzu mówisz, że to zrobiłeś:

set PYTHONPATH=%PYTHONPATH%;C:\My_python_lib

To miłe, ale to nie ustawia PYTHONzmiennej, tylko ją ustawia PYTHONPATH.


Tymczasem samo użycie setpolecenia wpływa tylko na bieżącą cmdsesję. Jeśli zrestartujesz się później, jak to powiedziałeś, skończysz z zupełnie nową cmdsesją, w której nie ma ustawionej zmiennej.

Istnieje kilka sposobów ustawiania zmiennych środowiskowych na stałe - najłatwiej jest w Panelu sterowania systemu w XP, który oczywiście jest inny w Vistie, inny w 7, a inny w 8, ale możesz go znaleźć w Google.

Alternatywnie po prostu zrób setprawo przed npmpoleceniem, bez ponownego uruchamiania między nimi.


Możesz sprawdzić, czy wszystko dobrze wykonałeś, robiąc dokładnie to samo, co skrypt konfiguracyjny: Przed uruchomieniem npmspróbuj uruchomić %PYTHON%. Jeśli zrobisz to dobrze, otrzymasz interpretera języka Python (z którego możesz natychmiast wyjść). Jeśli pojawi się błąd, nie zrobiłeś tego dobrze.


Są z tym dwa problemy:

set PYTHON=%PYTHON%;D:\Python

Po pierwsze, ustawiasz się PYTHONna ;D:\Python. Ten dodatkowy średnik jest odpowiedni dla rozdzielonej średnikami listy ścieżek, takich jak PATHlub PYTHONPATH, ale nie dla pojedynczej wartości, takiej jak PYTHON. Podobnie, dodanie nowej wartości do istniejącej wartości jest tym, czego chcesz, gdy chcesz dodać inną ścieżkę do listy ścieżek, ale nie dla pojedynczej wartości. Więc po prostu chcesz set PYTHON=D:\Python.

Po drugie, D:\Pythonnie jest ścieżką do twojego interpretera Pythona. To coś w stylu D:\Python\Python.exelub D:\Python\bin\Python.exe. Znajdź właściwą ścieżkę, upewnij się, że działa samodzielnie (np. Wpisz D:\Python\bin\Python.exei upewnij się, że masz interpreter w języku Python), a następnie ustaw zmienną i użyj jej.


Więc:

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

Lub, jeśli chcesz, aby było trwałe, zrób to samo w Panelu sterowania.

abarnert
źródło
1
OK, więc otrzymuję to: Microsoft Windows [Wersja 6.1.7601] Copyright (c) 2009 Microsoft Corporation. Wszelkie prawa zastrzeżone. C: \ Users \ Matt Cashatt> ustaw PYTHON =% PYTHON%; D: \ Python C: \ Users \ Matt Cashatt>% PYTHON% '% PYTHON%' nie jest rozpoznawany jako polecenie wewnętrzne lub zewnętrzne, program operacyjny lub plik wsadowy . C: \ Users \ Matt Cashatt>
Matt Cashatt
1
Poza tym na Ddysku mam Python na wypadek, gdybyś się zastanawiał. Jeszcze raz dziękuję za pomoc.
Matt Cashatt
Działa jak urok, dzięki! Dla innych: setz jakiegoś powodu musiałem uruchomić polecenie w oknie poleceń NPM, a następnie uruchomić mpm install jquerypolecenie zaraz po tym. Jeśli zrobiłem je osobno, z jakiegoś powodu to nie działało.
Matt Cashatt
@MatthewPatrickCashatt: Jak wyjaśniłem, setpolecenie wpływa tylko na bieżące cmdokno, więc musisz to zrobić przed uruchomieniem npmw tym samym oknie. Jeśli chcesz ustawić zmienne środowiskowe bardziej trwale, jest to w Panelu sterowania systemu lub odpowiednik dla twojej wersji systemu Windows.
abarnert
3
@abarnert jest faktyczną odpowiedzią na to pytanie, a następnie ustaw PYTHON = D: \ Python \ bin \ Python.exe - byłoby pomocne, jeśli podałeś prawidłowy sposób, a także wyjaśniłeś niewłaściwy sposób
reach4thelasers
449

Jeśli nie masz zainstalowanego Pythona i wszystkich zależności między węzłami-gyp, po prostu otwórz program Powershell lub Git Bash z uprawnieniami administratora i wykonaj:

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

a następnie zainstalować pakiet:

npm install --global node-gyp

po zainstalowaniu zostaną pobrane wszystkie zależności między węzłami gyp, ale nadal potrzebujesz zmiennej środowiskowej. Sprawdź poprawność Pythona rzeczywiście znajduje się w odpowiednim folderze:

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

Uwaga - używa Pythona 2.7, a nie 3.x, ponieważ nie jest obsługiwany

Jeśli nie jęczy, stwórz swoją zmienną środowiskową (użytkownika):

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

zrestartuj cmd i sprawdź, czy zmienna istnieje set PYTHON którą powinna zwrócić zmienną

Na koniec ponownie zastosuj npm install <module>

benscabbia
źródło
1
Miałem jakiś błąd uprawnień, ale udało mi się ręcznie zainstalować Pythona z: C: \ Users [ja] \. Windows-build-tools \ python.msi. W instalacji jest opcja dodania go do ścieżki. (Ponowne uruchomienie cmd / PS) i zadziałało
d.raev
Dostaję błąd klucza dh za mały: openssk \ ssl \ s3_clnt, c: 3641
user1428716
14
Wymagana instalacja narzędzi do kompilacji systemu Windows Program PowerShell działa jako administrator w systemie Windows 10. Oznacza to, że polecenie setx staje sięsetx PYTHON $env:USERPROFILE\.windows-build-tools\python27\python.exe
Bae
Musiałem uruchomić te polecenia w wierszu polecenia z podwyższonym poziomem uprawnień, ale wydaje się, że zadziałało. Ręczne instalowanie Pythona 3.x i ustawienie zmiennej środowiskowej PYTHON tak, aby wskazywało, że nie działało. Zakładam, że mój błąd związany z różnicą w wersji Pythona? Dziękuję niezależnie!
JeffryHouser
16

Dla mnie po zainstalowaniu narzędzi do kompilacji systemu Windows z poniższym komentarzem

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

uruchomienie kodu poniżej

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

pracował.

Serhat Oz
źródło
Potrzebowałem również obu powyższych kroków. Dodam też, że dla mnie (Windows 10 Pro 1803, węzeł 10.15.3, npm v6.9.0), kiedy uruchomiłem pierwszy krok, krok „npm install windows-build-tools”, instalacja nigdy nie wydawała się kompletne, wydawało się, że zapętla się w nieskończoność (przekazując te same linie wyjściowe do konsoli). Po kilku minutach oglądania tej pozornie niekończącej się pętli postanowiłem użyć Ctrl + C do „zakończenia zadania wsadowego”. Wszystko działało zgodnie z przeznaczeniem, przerwanie pętli nie wydawało się problemem.
StackOverflowUser
10

Jeden i / lub wiele z nich powinno pomóc:

  1. Dodaj C:\Python27\do swojej PATHzmiennej (biorąc pod uwagę, że w tym katalogu jest zainstalowany Python)
    Jak ustawić PATHzmienną env: http://www.computerhope.com/issues/ch000549.htm
    Po ustawieniu zmiennej uruchom ponownie konsolę i / lub Windows.

  2. W tej samej sekcji co powyżej („Zmienne środowiskowe”) dodaj nową zmienną o nazwie PYTHONi wartości. C:\Python27\python.exe
    Po ustawieniu zmiennej uruchom ponownie konsolę i / lub system Windows.

  3. Otwórz wiersz poleceń systemu Windows ( cmd) w trybie administratora .
    Zmień katalog na ścieżkę instalacji w języku Python: W cd C:\Python27
    przypadku niektórych instalacji ustaw łącze symboliczne:mklink python2.7.exe python.exe

Pamiętaj, że powinieneś mieć Python 2.x, NIE 3.x , aby uruchamiać node-gypinstalacje oparte!

Poniższy tekst mówi o Uniksie, ale wersja Windows wymaga również 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

Ten artykuł może również pomóc: https://github.com/nodejs/node-gyp#installation

thybzi
źródło
8

Miałem ten sam problem i żadna z tych odpowiedzi nie pomogła. W moim przypadku zmienna PYTHON została ustawiona poprawnie. Jednak Python został zainstalowany zbyt głęboko, tzn. Ma zbyt długą ścieżkę. Zrobiłem więc:

  1. ponownie zainstalowałem Pythona na c: \ python
  2. ustaw zmienną środowiskową PYTHON na C: \ python \ python.exe

I to wszystko!

zhekaus
źródło
6

istnieje kilka sposobów rozwiązania tego problemu: 1) uruchom wiersz polecenia jako „administrator”.

jeśli pierwsze rozwiązanie nie rozwiąże problemu, wypróbuj ten:

2) otwórz wiersz polecenia jako administrator wklej następujący wiersz kodu i naciśnij klawisz Enter:

npm install --global --production windows-build-tools
Pedram Rastegar
źródło
5

TL; DR Utwórz kopię lub alias swojego python.exe o nazwie python2.7.exe

Mój python 2.7 został zainstalowany jako

D: \ app \ Python27 \ python.exe

Ten błąd zawsze występował bez względu na to, jak ustawiłem (i zweryfikowałem) zmienną env PYTHON:

gyp ERR! Błąd stosu: nie można znaleźć pliku wykonywalnego Python „python2.7”, można ustawić zmienną env PYTHON.
gyp ERR! stos w failNoPython (C: \ Program Files \ nodejs \ node_modules \ npm \ node_modules \ node-gyp \ lib \ configure.js: 103: 14)

Powodem tego było to, że w pliku config.js node-gyp plik wykonywalny Pythona został rozwiązany w następujący sposób:

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

Okazało się, że gyp.opts.python miał wartość „python2.7”, co przesłania proces.env.PYTHON.

Rozwiązałem to, tworząc alias pliku wykonywalnego python.exe o nazwie, której szukał node-gyp:

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

Potrzebujesz uprawnień administratora do tej operacji.

iaarnio
źródło
5

Poniższe działało dla mnie z wiersza poleceń jako administrator:

Instalowanie narzędzi do kompilacji systemu Windows (może to zająć 15-20 minut):

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

Dodanie / aktualizacja zmiennej środowiskowej:

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

Instalowanie węzła gyp:

npm install --global node-gyp

Zmiana nazwy pliku exe z Python na Python2.7.

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

npm install module_name --save

Sikander
źródło
5

To najłatwiejszy sposób, aby NPM zrobił wszystko za Ciebie

npm --add-python-to-path='true' --debug install --global windows-build-tools
Ashish Gupta
źródło
4

Właściwy sposób to 1) Pobierz i zainstaluj Python 2.7.14 stąd . 2) Ustaw zmienną środowiskową dla Pythona z tutaj .

Gotowe!

Uwaga: Ustaw odpowiednio zmienną środowiskową. Odpowiedziałem tutaj na Windows.

Herat Patel
źródło
4

Podjąłem to samo wyzwanie, próbując zainstalować [email protected] .

Po zapoznaniu się z bieżącą oficjalną dokumentacją i przeczytaniu powyższych odpowiedzi zauważyłem, że niekoniecznie musisz zainstalować gyp węzła lub zainstalować narzędzia do budowania systemu Windows. Oto, co mówi, tutaj o instalowaniu węzła gyp w systemie Windows . Pamiętaj, węzeł-gyp bierze udział w procesie instalacji węzła-sass. I tak naprawdę nie musisz ponownie instalować innej wersji Pythona.

To jest zbawiciel, skonfiguruj ścieżkę pythona, której powinien szukać „npm” podczas instalowania pakietów wymagających narzędzi do budowania.

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

Zainstalowałem tam python3.6.3 na Windows-7.

MwamiTovi
źródło
To samo rozwiązanie działało dla mnie podczas instalacji [email protected], kiedy przełączyłem się na windows-10, używając [email protected]i[email protected]
MwamiTovi
Zauważ, że Python36/pythonpowinna to być ścieżka do pliku wykonywalnego Pythona.exe
MwamiTovi,
Jeśli jest nowy, przejdź do miejsca, w którym został zainstalowany plik wykonywalny Pythona. Whold Shift, and Right-Clicknpm config set python
systemie
2

Dlaczego nie pobrać tutaj instalatora Pythona ? To sprawdzi się podczas sprawdzania instalacji ścieżki

T-prod
źródło
2

Dla mnie te kroki rozwiązały problem:

1- Uruchamianie tego cmd jako admin:

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

2- Następnie uruchamianie npm rebuildpo zakończeniu pierwszego kroku (zwłaszcza ukończenie instalacji Pythona 2.7, która była główną przyczyną problemu)

Ahmed Elkoussy
źródło
1

Oto poprawne polecenie: set path =% path%; C: \ Python34 [Zamień na poprawną ścieżkę instalacji Pythona]

Miałem ten sam problem i właśnie to rozwiązałem.

Jak zauważyli inni ludzie, jest to niestabilna konfiguracja, działa ona tylko dla bieżącej sesji cmd i (oczywiście) musisz ustawić swoją ścieżkę przed uruchomieniem instalacji npm.

Mam nadzieję, że to pomoże.

Projenix
źródło
1

gyp ERR! skonfiguruj błąd gyp ERR! Błąd stosu: Nie można znaleźć wykonywalnego Pythona „python”, można ustawić zmienną env PYT HON.

Nie ma potrzeby ponownej instalacji, ten wyjątek rzuca według skryptu node-gyp, a następnie spróbuj odbudować. Wystarczy konfiguracyjna zmienna środowiskowa, jak w moim przypadku:

SET PYTHON=C:\work\_env\Python27\python.exe
Y. Aliaksei
źródło
1

Jeśli próbujesz użyć tego w Cygwin, musisz postępować zgodnie z instrukcjami w tej odpowiedzi. (Problem polega na tym, jak Cygwin traktuje dowiązania symboliczne Windows).

emigenix
źródło
1

Przykład: pg_config nie jest wykonywalny / error node-gyp

Rozwiązanie: W systemie Windows po prostu spróbuj dodać PATH Env -> C: \ Program Files \ PostgreSQL \ 12 \ bin

Pracuj dla mnie, teraz mogę używać npm i pg-obiecać na przykład lub innych zależności.

P0y
źródło
Na pg-promisenie trzeba tego. Prawdopodobnie zostali porwani przez to . Po prostu skorzystaj z najnowszej wersji, a wszystko będzie dobrze, nie będziesz potrzebować żadnych dodatkowych rzeczy;)
vitaly-t
0

Dla mnie problemem było to, że korzystałem z najnowszej wersji węzła, a nie LTSwersji stabilnej i zalecanej dla większości użytkowników.
Korzystanie z LTSwersji rozwiązało problem.
Możesz pobrać stąd:

Wersja LTS

Aktualna najnowsza wersja

Nurul Sundarani
źródło