2014-07-14 14 views
5

Ogni volta che installo determinati pacchetti node, ci sono degli errori che riguardano la versione Python. Questo perché ho entrambi Python 2.7 e Python 3.3 (quelli erano le ultime versioni l'ultima volta che ho aggiornato, ma ora c'è 3.4), ma ovviamente posso solo trovare una versione nel mio PATH (tutte le cartelle successive sono sovrascritte). Ho Python 3.3 nel mio PATH perché è più recente, ma ci sono ancora così tanti programmi, inclusi i moduli npm, che usano Python 2, oltre 5 anni dopo.npm Utilizzare 2 versioni di Python

Esiste un modo per includere una versione "fallback" Python, per i moduli che non possono ancora utilizzare la versione 3? Una soluzione generale sarebbe sorprendente, ma vorrei almeno una soluzione per l'installazione dei moduli npm. Tieni presente che alcuni moduli potrebbero essere perfettamente a posto con Python 3, anche se non sono sicuro se ce ne sono alcuni che non possono utilizzare Python 2. Detto questo, una soluzione che consente a entrambi, utilizzando la versione più recente quando è compatibile e una versione precedente quando no, sarebbe la soluzione migliore.

Per riferimento, il mio Python 2.7 è installato nella cartella C:\Python27\python e Python 3.3 è nella cartella C:\Python33\python. L'errore npm sto ottenendo è:

[email protected] installare c: \ repos \ konneka \ node_modules \ Buster \ node_modules \ bus ter-sintassi \ node_modules \ jsdom \ node_modules \ contextify nodo-gyp ricostruire

| 
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

ero in procinto di chiedere se posso installare Node.js con Python 3.4, su Ubuntu. Quindi questo è un no, giusto? –

+0

Penso che lo chiederò comunque, solo per essere sicuro. –

+0

@GuiImamura, sembra che tu non capisca il punto di questa domanda. Prima di tutto, tutto questo è su Windows, non su Ubuntu. In secondo luogo, la versione di Python non ha nulla a che fare con la possibilità di installare il nodo o meno, sebbene sia importante quando si installano determinati moduli, che era il punto di questa domanda. Se è possibile installare Node con Python, è fantastico, ma, ancora una volta, non il punto qui. – trysis

risposta

2

Usa virtualenv e nodeenv ed avere una qualsiasi combinazione versione che si desidera.

+1

Quali variabili di ambiente dovrei usare? Come dovrei installarlo? Dove? Nel pacchetto "package.json"? – trysis

+0

https://github.com/jhermann/hello-gulp-js#hello-gulp-js - probabilmente hai bisogno di CygWin affinché nodeenv funzioni su Windows. – jhermann

0

il mio modo di capovolgere tra di loro sta usando lo shebang all'inizio del file python

includendo:

#!python2 

all'inizio del file, quando si fa doppio clic su di esso la py.exe (o pyw.exe) passa a quella versione di Python (assumendo che può trovarlo) si può anche passare:

#!python2.7 

utilizzare in modo esplicito versione 2.7 a patto di avere la versione multiplo di p ython2 installato.

e di fare uso di questo durante l'installazione di moduli, basta modificare il file di installazione per includere quella linea come prima linea, e quindi evitare di mettere in pitone nella linea di comando

a patto di utilizzare i file batch per installare moduli come faccio, dove la maggior parte la gente mette:

python setup.py install 

Ho quindi utilizzare:

setup.py install 

questo assicura che lo script di installazione determina quale versione di Pyth su di esso è installato in

ho anche trovato dopo un po 'di giocoleria python 2 + 3 che ha reso più facile per me modificare il registro in modo che quando faccio clic destro su un file python potrei aprirlo con inattivo 2 o 3 .

EDIT: Devo dire che questo funziona correttamente solo quando python3 era installato l'ultima, come pitone 2 set valori ostili nel Registro di sistema, e passa direttamente alla versione python2 piuttosto che controllando il file prima

+0

Cosa intendi con "file di installazione"? Sto usando Windows, non Linux, come potreste essere in grado di dire dal 'PATH'/altre parti della domanda, quindi non uso' Makefile's (anche se forse potrei). Inoltre, in che file metti gli shebang? – trysis

+0

quando si scarica un modulo può venire in due forme a seconda di dove si ottiene, alcuni come il codice sorgente (che di solito hanno un file chiamato setup.py) che gestisce l'installazione, e altri sono installati tramite eseguibili, il gli eseguibili si gestiscono da soli, quindi dovresti solo preoccuparti di installare i moduli dall'origine. –

+0

Sto facendo tutto questo da 'npm', e i deps sono spesso dove avviene la mancata corrispondenza di Python. Se non hanno questo shebang in cima, non voglio metterlo lì, dato che posso aggiornare o clonare 'npm' roba molte volte e probabilmente dimenticherò. – trysis

Problemi correlati