2014-07-14 10 views
5

Ilekroć instaluję niektóre pakiety node, występują błędy dotyczące wersji Python. To dlatego, że mam zarówno Python 2.7, jak i (ostatnio były to najnowsze wersje, ale teraz jest 3.4), ale oczywiście mogę tylko pobrać jedną wersję w mojej PATH (wszelkie późniejsze foldery są nadpisywane). Mam Python 3.3 w moim PATH, ponieważ jest nowszy, ale wciąż istnieje wiele programów, w tym moduły npm, które używają Python 2, w ciągu 5 lat później.npm Użyj 2 wersji Pythona

Czy jest jakiś sposób dodania wersji "awaryjnej" Python dla modułów, które nie mogą jeszcze korzystać z wersji 3? Ogólne rozwiązanie byłoby niesamowite, ale chciałbym przynajmniej znaleźć rozwiązanie podczas instalowania modułów npm. Należy pamiętać, że niektóre moduły mogą być doskonale w porządku z Python 3, choć nie jestem pewien, czy są jakieś, które nie mogą używać Python 2. W związku z tym najlepiej byłoby znaleźć rozwiązanie, które pozwala zarówno na użycie najnowszej wersji, gdy jest kompatybilna, jak i starszej wersji, gdy nie jest.

W celach informacyjnych mój Python 2.7 jest zainstalowany w folderze C:\Python27\python, a Python 3.3 znajduje się w folderze C:\Python33\python. Błąd Dostaję npm jest:

[email protected] zainstalować c: \ repo \ konneka \ node_modules \ buster \ node_modules \ autobus ter-składnia \ node_modules \ jsdom \ node_modules \ contextify węzła gyp odbudować

| 
c:\repos\konneka\node_modules\buster\node_modules\buster-syntax\node_modules\jsd 
om\node_modules\contextify>node "c:\Program Files\nodejs\node_modules\npm\bin\no 
de-gyp-bin\\..\..\node_modules\node-gyp\bin\node-gyp.js" rebuild 
[email protected] node_modules\buster\node_modules\buster-server-cli\node_modules\buste 
r-cli\node_modules\buster-configuration\node_modules\when 
[email protected] node_modules\buster\node_modules\buster-test-cli\node_modules\ramp\ 
node_modules\ramp-resources\node_modules\lodash 
gyp ERR! configure error 
gyp ERR! stack Error: Python executable "python" is v3.3.2, which is not support 
ed 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 (c:\Program Files\nodejs\node_modules\np 
m\node_modules\node-gyp\lib\configure.js:108:14) 
gyp ERR! stack  at c:\Program Files\nodejs\node_modules\npm\node_modules\node 
-gyp\lib\configure.js:97:9 
gyp ERR! stack  at ChildProcess.exithandler (child_process.js:645:7) 
gyp ERR! stack  at ChildProcess.emit (events.js:98:17) 
gyp ERR! stack  at maybeClose (child_process.js:755:16) 
gyp ERR! stack  at Process.ChildProcess._handle.onexit (child_process.js:822: 
5) 
ERR! System Windows_NT 6.2.9200 
command "node" "c:\\Program Files\\nodejs\\node_modules\\npm\\node_modules\\nod 
e-gyp\\bin\\node-gyp.js" "rebuild" 
[email protected] node_modules\browserify\node_modules\syntax-e 
rror\node_modules\esprima-fb 
[email protected] node_modules\karma\node_modules\http-proxy 
├── [email protected] 
└── [email protected] ([email protected], [email protected], [email protected], [email protected], [email protected] 
0) 
cwd c:\repos\konneka\node_modules\buster\node_modules\buster-syntax\node_module 
s\jsdom\node_modules\contextify 
gyp ERR! node -v v0.10.29 
gyp ERR! node-gyp -v v0.13.1 
gyp ERR! not ok 
+0

byłem pytam, czy mogę zainstalować Node.js z Pythonem 3.4, na Ubuntu. Więc to nie, prawda? –

+0

Myślę, że i tak się o to zapytam, żeby się upewnić. –

+0

@GuiImamura, wygląda na to, że nie rozumiesz sensu tego pytania. Po pierwsze, wszystko to działa w systemie Windows, nie Ubuntu. Po drugie, wersja Pythona nie ma nic wspólnego z tym, czy możesz zainstalować Węzeł, czy nie, ale ważne jest, gdy instalujesz określone moduły, co było punktem tego pytania. Jeśli możesz zainstalować Węzeł z Pythonem, to jest niesamowite, ale znowu nie o to tutaj chodzi. – trysis

Odpowiedz

2

Korzystając virtualenv i nodeenv i mieć dowolną kombinację wersji chcesz.

+1

Jakie zmienne środowiskowe powinienem użyć? Jak mam to ustawić? Gdzie? W pakiecie 'pakiet.json'? – trysis

+0

https://github.com/jhermann/hello-gulp-js#hello-gulp-js - prawdopodobnie będziesz potrzebować CygWin dla nodeenv do pracy w systemie Windows. – jhermann

0

sposób mogę przerzucić między nimi za pomocą shebang na początku plików Pythona

o tym:

#!python2 

na początku pliku, po dwukrotnym kliknięciu mu py.exe (lub pyw.exe) przekazuje go do tej wersji Pythona (zakładając, że można go znaleźć) można nawet przekazać go:

#!python2.7 

jawnie użyć wersji 2.7 zakładając, że masz wiele wersji p zainstalowany ython2.

i wykorzystać to podczas instalowania modułów, wystarczy edytować plik instalacyjny, aby włączyć tę linię jako pierwszej linii, a następnie unikać umieszczania Pythona w wierszu poleceń

zakładając użycie plików wsadowych do zainstalowania modułów takich jak zrobić, gdzie większość ludzi umieścić:

python setup.py install 

i następnie użyj:

setup.py install 

zapewnia to, że skrypt instalacyjny decyduje, która wersja pyth na to jest zainstalowany na

znalazłem również po chwili żonglowania python 2 + 3, że to mi łatwiej edytować rejestr, tak aby po kliknięciu prawym przyciskiem myszy pliku Pythona mógłbym go otworzyć bezczynnie 2 lub 3 .

EDIT: powinienem wspomnieć, że to tylko działa poprawnie, gdy python3 był ostatni zainstalowany, jak pyton 2 zestawy wartości nieprzyjazne w rejestrze, i przechodzi bezpośrednio do wersji python2 zamiast sprawdzania pierwszy plik

+0

Co masz na myśli przez "plik instalacyjny"? Używam systemu Windows, nie Linuksa, ponieważ być może byłeś w stanie powiedzieć przez "PATH"/inne części pytania, więc nie używam 'Makefile's (chociaż być może mógłbym). A także, do jakiego pliku wkładasz shebangi? – trysis

+0

Po pobraniu modułu może on występować w dwóch formach, w zależności od tego, skąd je bierzesz, niektóre pochodzą z kodu źródłowego (który zwykle ma plik o nazwie setup.py), który zarządza instalacją, a inne są instalowane za pomocą plików wykonywalnych, pliki wykonywalne zarządzają sobą, więc powinieneś tylko martwić się instalowaniem modułów ze źródła –

+0

Robię to wszystko z 'npm', a depy są często tam, gdzie występuje niedopasowanie Pythona. Jeśli nie mają tego szczytu na górze, nie chcę go tam umieszczać, ponieważ mogę wielokrotnie aktualizować lub klonować rzeczy 'npm' i prawdopodobnie zapomnę. – trysis