2013-02-28 16 views
140

Dostaję się do bazy kodu Node.js, która wymaga pobrania kilku zależności za pośrednictwem NPM, a mianowicie jQuery.Uruchamianie Pythona w systemie Windows dla zależności Node.js

Próbując uruchomić npm install jquery, wciąż otrzymuję 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 

> [email protected] 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 niepowodzenie jest spowodowane brakującym instalacji Pythona. Cóż, zainstalowałem Pythona, ustawiam zmienną i zrestartowałem i nadal mam błąd.

Jakąkolwiek wskazówkę dotyczącą tego, czego mi brakuje?

+0

można wkleić tekst jako tekst, zamiast obrazu? Poza tym, że jest trudny do odczytania (zwłaszcza, że ​​jest wyraźnie zmniejszony już czcionek bitmapowych o niskiej rozdzielczości), nie można go kopiować. – abarnert

+1

Co ważniejsze: Jak ustawiłeś zmienną środowiskową przed ponownym uruchomieniem? Jeśli po prostu zrobiłeś 'PYTHON = C: \ Python27 \ Python.exe' w twoim oknie cmd i zrestartowałeś, ustawienie zostało utracone. – abarnert

+6

Również, którą wersję Pythona zainstalowałeś? Przynajmniej starsze wersje gafów i gypów wymagały 2.x, ale nic o tym nie powiedziały, i podawałyby wszelkie tajemnicze błędy, gdyby zamiast tego zainstalowano 3.x. – abarnert

Odpowiedz

92

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

Błąd wyraźnie mówi tak:

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

I w swoim komentarzu, mówisz, że to zrobił:

set PYTHONPATH=%PYTHONPATH%;C:\My_python_lib 

To miłe, ale nie ustawia zmienną PYTHON, ustawia zmienna PYTHONPATH.


Tymczasem tylko przy użyciu komendy set dotyczy tylko bieżącego cmd sesji. Jeśli zrestartujesz komputer po tym, jak mówisz, skończysz z zupełnie nową sesją cmd, która nie zawiera tej zmiennej.

Istnieje kilka sposobów na stałe ustawienie zmiennych środowiskowych - najprościej jest w Panelu sterowania systemem w XP, który jest oczywiście inny w systemie Vista, inny raz w 7, a inny raz znowu w 8, ale możesz google dla to.

Alternatywnie, wystarczy wykonać polecenie set tuż przed poleceniem npm, bez konieczności ponownego uruchamiania.


Można sprawdzić, czy zrobiłeś to dobrze robiąc dokładnie to samo skrypt konfiguracyjny stara się zrobić: Przed uruchomieniem npm, spróbuj uruchomić %PYTHON%. Jeśli zrobiłeś to dobrze, dostaniesz interpretera Pythona (który możesz natychmiast zamknąć). Jeśli pojawi się błąd, nie zrobiłeś tego dobrze.


Istnieją dwa problemy z tym:

set PYTHON=%PYTHON%;D:\Python 

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

Po drugie, D:\Python nie jest ścieżką do interpretera języka Python. Jest to coś w rodzaju D:\Python\Python.exe lub D:\Python\bin\Python.exe. Znajdź właściwą ścieżkę, upewnij się, że działa samodzielnie (np., wpisz D:\Python\bin\Python.exe i upewnij się, że otrzymałeś interpreter języka Python), a następnie ustaw zmienną i użyj jej.


Więc:

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

Lub, jeśli chcemy, aby było trwałe, zrobić równowartość w Panelu sterowania.

+1

OK, więc rozumiem: Microsoft Windows [Wersja 6.1.7601] Copyright (c) 2009 Microsoft Corporation. Wszelkie prawa zastrzeżone. C: \ Użytkownicy \ Mt Cashatt> set PYTHON =% PYTHON%; D: \ Python C: \ Użytkownicy \ Mt Cashatt>% PYTONU% '% PYTONU%' nie jest rozpoznawana jako polecenie wewnętrznego lub zewnętrznego program operacyjny lub plik wsadowy. C: \ Users \ Matt Cashatt> –

+0

Przepraszamy za formatowanie. –

+1

Ponadto, dysk 'D' jest tym, gdzie mam Python na wypadek, gdybyś się zastanawiał. Jeszcze raz dziękuję za pomoc. –

4

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, czyli ma zbyt długą ścieżkę. Tak, zrobiłem, co następuje:

  1. ponownej instalacji Pythona do c: \ python
  2. ustawiona zmienna środowiskowa PYTHON do katalogu C: \ python \ python.exe

I to jest to!

3

TL; DR Wykonaj kopię lub alias swojego python.exe o nazwie python2.7.exe

Moja Python 2.7 został zainstalowany jako

D:\app\Python27\python.exe

ja zawsze mam ten błąd bez względu na to jak ja zestaw (i sprawdzone) PYTHON env zmienna:

 
gyp ERR! stack Error: Can't find Python executable "python2.7", you can set the PYTHON env variable. 
gyp ERR! stack  at failNoPython (C:\Program Files\nodejs\node_modules\npm\node_modules\node-gyp\lib\configure.js:103:14) 

powodem tego było to, że w configure.js Node-Gyp za wykonywalny pyton został rozwiązany jak:

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

I okazało się, że gyp.opts.python miał wartość 'python2.7' zastępując process.env.PYTHON.

Postanowiłem to poprzez stworzenie aliasu dla python.exe wykonywalny o nazwie węzła-Gyp szukał:

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

Musisz prawa administratora dla tej operacji.

0

Oto poprawne polecenie: set path =% path%; C: \ Python34 [Wymień prawidłowej ścieżce instalacji Pythona]

miałem ten sam problem i po prostu rozwiązać ten tak.

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

Mam nadzieję, że to pomoże.

0

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

Nie trzeba ponownie instalować, ten wyjątek rzuca skryptem node-gyp, a następnie spróbuj odbudować. To wystarczy konfiguracja środowiska zmienna jak w moim przypadku zrobiłem:

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

Jeśli starasz się to wykorzystać na Cygwin, to trzeba postępować zgodnie z instrukcjami w this odpowiedź. (Jest to problem jak Cygwin traktuje dowiązania Windows.)

4

Jeden i/lub wielokrotność tych powinno pomóc:

  1. Dodaj C:\Python27\ do zmiennej PATH (biorąc pod uwagę masz Python zainstalowane w tym katalogu)
    Jak ustawić zmienną PATH env: http://www.computerhope.com/issues/ch000549.htm
    Ponownie uruchom konsolę i/lub system Windows po ustawieniu zmiennej.

  2. W tej samej sekcji, co powyżej („Zmienne środowiskowe”), należy dodać nową zmienną o nazwie PYTHON i wartości C:\Python27\python.exe
    Ponownie uruchom konsolę i/lub Windows po ustawieniu zmiennej.

  3. Otwórz wiersz polecenia Windows (cmd) w trybie administratora.
    Zmień katalog na swojej ścieżce instalacji Pythona: cd C:\Python27
    Producent symlink potrzebne dla niektórych instalacjach: mklink python2.7.exe python.exe

Uwaga trzeba mieć Pythona 2.x, 3.x NIE, aby uruchomić node-gyp oparciu instalacje!

Poniższy tekst mówi o Uniksie, ale wersja dla Windows wymaga Pythona 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 pomóc także: https://github.com/nodejs/node-gyp#installation

230

Jeśli nie masz python zainstalowany wraz ze wszystkimi z dependecies węzła Gyp, wystarczy wykonać:

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

a następnie zainstalować pakiet:

npm install --global node-gyp 

po zainstalowaniu, będziesz mieć wszystkie pobrane zależności węzeł-gyp, ale nadal potrzebujesz zmiennej środowiskowej.Validate Python jest rzeczywiście znaleźć się w odpowiednim folderze:

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

Note - it uses python 2.7 not 3.x as it is not supported

Jeśli nie jęczeć, należy iść dalej i utworzyć (użytkownika) zmienną środowiskową:

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

restartu cmd i sprawdź, czy istnieje zmienna za pośrednictwem set PYTHON, która powinna zwrócić zmienną

Wreszcie ponownie zastosować npm install <module>

+0

Miałem pewne błędy uprawnień, ale udało mi się ręcznie zainstalować pythona z: C: \ Users \ [me] \. Windows-build-tools \ python.msi. W instalacji jest opcja dodania go do ścieżki. (Ponowne uruchomienie cmd/PS) i zadziałało –

+0

Otrzymałem błąd dh key too small: openssk \ ssl \ s3_clnt, c: 3641 – user1428716

+7

Wymagane instalowanie windows-build-tools PowerShell jest uruchamiany jako Admin w Windows 10. Oznacza to polecenie setx staje się 'setx PYTHON $ env: USERPROFILE \ .windows-build-tools \ python27 \ python.exe' – Bae

1

Dlaczego nie pobrać instalatora python here? To sprawi, że praca dla ciebie, kiedy sprawdzić instalację ścieżki

0

Następujące pracował dla mnie z linii poleceń jako admin:

Instalacja Windows-build-tools (może to trwać 15-20 minut):

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

Dodawanie/aktualizowanie zmienną środowiskową:

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

Instalacja 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

0

istnieją pewne rozwiązanie, aby rozwiązać ten problem: 1) uruchomić wiersz polecenia jako "administrator".

jeśli pierwsze rozwiązanie nie rozwiąże Twój problem spróbuj tego:

2) otworzyć wiersz polecenia jako administrator wklej następujący wiersz kodu i nacisnąć enter:

npm install --global --production windows-build-tools 
Powiązane problemy