2012-05-05 17 views
10

Sono di fronte a una situazione unica, un po 'banale ma dolorosa.Come utilizzare più versioni di Python senza disinstallare

Ho bisogno di usare Python 2.6.6 perché NLTK non è portato su Python 3 (è quello che potrei raccogliere).

In un codice diverso (che funziona contemporaneamente), esiste una funzione di contatore delle raccolte che è disponibile solo in Python 3 ma non in Python 2.6.6.

Così, ogni volta che passo tra i due codici, ho bisogno di installare & disinstallare le versioni. È una tale perdita di tempo.

Qualche suggerimento su come specificare quale versione voglio utilizzare?

+2

Quale os ??????? –

+1

Basta installare più versioni. –

+0

Python 2 e 3 possono essere installati affiancati. Perché è necessario disinstallare e reinstallare? –

risposta

1

Si dovrebbe guardare in virtualenv. L'ho saputo dal post del blog this, che parla di pip e fabric, anche strumenti molto utili per lo sviluppatore Python.

2

Utilizzare Pythonbrew, è semplicissimo da installare e consente di installare e passare in modo semplice o di utilizzare temporaneamente diverse versioni Python.

volta pythonbrew è installato:

#to install new python versions is as simple as: 
pythonbrew install 2.7.2 3.2 
#to use a particular version in the current shell: 
pythonbrew use 3.2 
#to uninstall: 
pythonbrew uninstall 2.7.2 
9

È sufficiente installare più versioni in directory separate, e quindi si esegue il programma di pitone con la versione di Python che si desidera utilizzare. Così:

C:\Python26\Python.exe thescript.py 

O simile.

Ciò che virtualenv fa è che ti dà molte installazioni "virtuali" separate di la stessa versione python. Questo è un problema completamente diverso e quindi non ti aiuterà in alcun modo.

+0

virtualenv può anche funzionare con diversi Le versioni di Python, così che quando hai un virtualenv attivo, 'python' punta alla versione Python di quel virtualenv. Quindi non è del tutto irrilevante, anche se probabilmente è eccessivo. –

+1

@ThomasK: Sì, ma questo non risolve il suo problema, e non è necessario risolvere il suo problema. È rilevante quanto il caffè. È una bella aggiunta, ma in realtà non risolve nulla. –

+0

Se si esegue questa operazione, il python che si esegue sa cercare nella cartella appropriata i pacchetti, ecc.? Oppure Python 2.6 guarderà in C: \ Python33 \ Scripts perché è quello che c'è nel mio PERCORSO? – LarsH

15

Installare Python 3

Python 3.3 e superiori mettere un py.exe nella cartella di Windows.[link] Questo eseguibile viene utilizzato per determinare la versione di Python con la prima riga del file:

#!/usr/bin/python2.7 

verrà eseguito con Python 2.7. Devi installare la versione di Python 3 dopo aver installato le altre versioni di Python.

le risorse aggiuntive: https://docs.python.org/3/using/windows.html#customization

pywinhttps://pypi.python.org/pypi/pywin

vecchia soluzione

immagino che si utilizza Windows. Ho risolto questo problema con un trucco:

Ogni volta che avvio python su windows verrà utilizzato python.bat. Questo avvia python.py che analizza il file per l'intestazione dopo #! per la versione python.

Per avviare example.py digito nella console

python example.py 

ma potrebbe anche essere avviato per Klick.

questo è il mio file python C: \ bin \ python.py

#!/usr/bin/env python2 
import sys 
import os 
args = sys.argv 
if len(args) <= 1: 
    # no arguments 
    # start python console 
    i = os.system('C:\bin\python2.bat' + " ".join(args[1:])) 
    if type(i) != int: 
     i = 0 
    exit(i) 

def analyse(filename, default = ''): 
    '''=> '2', '3', default ''' 
    try: 
     f = open(filename) 
    except IOError: 
     # file not found 
     return default 
    firstLine = f.readline() 
    if firstLine.startswith('#!'): 
     if 'python2' in firstLine: 
      return '2' 
     if 'python3' in firstLine: 
      return '3' 
     i = firstLine.find(' ') 
     if i != -1: 
      # analyse from end of path on 
      in2 = '2' in firstLine[i:] 
      in3 = '3' in firstLine[i:] 
      if in2 and not in3: 
       return '2' 
      if in3 and not in2: 
       return '3' 
     else: 
      # analyse path 
      in2 = '2' in firstLine 
      in3 = '3' in firstLine 
      if in2 and not in3: 
       return '2' 
      if in3 and not in2: 
       return '3' 
    return default 



no = analyse(args[1], default = '2') 
if args[1][-1:] == 'w': 
    # python win 
    cmd = 'C:\bin\pythonw%s.bat' 
else: 
    cmd = 'C:\bin\python%s.bat' 
i = os.system(cmd % no + ' ' + " ".join(args[1:])) 

if type(i) != int: 
    i = 0 
exit(i) 

Questo è il file C: \ bin \ python.bat

@echo off 
C:\bin\python2 C:\bin\python.py %* 
rem this may also work: 
rem C:\bin\python.py %* 

e in ogni file che si avvia bisogna mettere uno

#!/bin/env/python3 

o

01.235.
#!/bin/env/python2 

predefinito è python2

Poi ho aggiunto i file nella cartella:

C: \ bin \ python2.bat

@echo off 
C:\python27\python.exe %* 

C: \ bin \ pythonw2.bat

@echo off 
C:\python27\pythonw.exe %* 

C: \ python3.bat

@echo off 
C:\python32\pythonw.exe %* 

C: \ bin \ pythonw3.bat

@echo off 
C:\python32\pythonw.exe %* 

Se si utilizza invece Python26 se python27 allora avete bisogno di cambiare

C:\python27 

a

C:\python26 

e così via. Stessa cosa con Python non utilizza python 32.

Si consiglia inoltre di avviare i file python per Klick

quindi fare questo:

Klick destro su un file .py -> aperto con - > seleziona C: \ bin \ python.bat

In caso di problemi contattami o lascia un commento.

+0

Nice, if hackish, soluzione al problema di Windows. –

+2

Se si installa python 3 come ultima versione, riconoscerà il '#!' In Windows – User

0

Io uso almeno 3 o 4 versioni di Python sulle mie macchine (Windows). I programmi di installazione da http://python.org/ loro inseriti automaticamente:

c:\Python26 
c:\Python27 
c:\Python32 

e

c:\Python24 

su una macchina. Io uso principalmente Python 2.7 perché alcune applicazioni usano wxPython e anche per il vecchio codice della console. Questo python.exe non è stato rinominato. A proposito, il Python 2.7 supporta anche collections.Counter.

I c:\Python26 e c:\Python24 non sono inclusi nel mio PERCORSO. In c:\Python32\, l'exe è stato rinominato in py.exe. In questo modo, python some.py avvia Python 2.7 e py another.py avvia Python 3.2.

0

È possibile specificare la versione desiderata nella riga shebang. Mi sono imbattuto in questo quando un ragazzo VM my Ops impostato aveva Python 2.6 in /usr/bin/python2.6, e avevo bisogno di 2.7 per alcune funzionalità. L'ha installato per me su /usr/bin/python2.7.

La mia vecchia baracca:

#!/usr/bin/env python 

ha smesso di funzionare, perché/usr/bin/python era un collegamento ad /usr/bin/python2.6. Che liquidazione risolvere il problema, e lavorare attraverso Windows, Linux e OSX, stava cambiando la baracca a:

#!/usr/bin/env python2.7 

Dovrebbe funzionare per qualsiasi versione, credo.

5

Per coloro che utilizzano Windows, se non si è contrari all'uso di PowerShell, è possibile installare python 2 e 3 separatamente come indicato in altre risposte. Quindi è possibile effettuare ciò:

Set-Alias python27 [some path]\python27\python.exe 
Set-Alias python33 [some path]\python33\python.exe 

Per creare un alias per l'esecuzione di ogni versione.

alias Mantenere giro è descritto in questo link: https://msdn.microsoft.com/en-us/powershell/reference/5.1/microsoft.powershell.core/about/about_aliases#saving-aliases

Al fine di caricare correttamente il profilo che quel collegamento sarebbe di creare, potrebbe essere necessario cambiare la vostra strategia di esecuzione.

Set-ExecutionPolicy RemoteSigned 

dovrebbe fare il trucco, ma se volete sapere di più su criteri di esecuzione che si può decidere di seguire questo link: https://msdn.microsoft.com/en-us/powershell/reference/5.1/microsoft.powershell.core/about/about_execution_policies

+0

Per cmd.exe, utilizzare [doskey.com] (http://technet.microsoft.com/en-us/library/bb490894 .aspx) (è davvero un exe PE, non un DOS com). La console di Windows supporta gli alias associati al nome dell'immagine di ciascun processo allegato. Puoi caricare alias da un file usando l'opzione 'macrofile' di doskey. Ad esempio, la sezione '[cmd.exe]' del file potrebbe avere la riga 'python3 = C: \ Python34 \ python.exe $ *'. Aggiungi il comando doskey a uno script cmd caricato dal valore 'AutoRun' in' HKCU \ Software \ Microsoft \ Command Processor'. È anche possibile aggiungere una sezione '[python.exe]' per gli alias in modalità interattiva. – eryksun

1

La richiesta OP è un po 'datato, soprattutto ora che NLTK ha ancora una porta py3.x. vedi Install nltk 3.0 on Ubuntu 13.10 using tar.gz download

Ecco come è possibile far funzionare python3 con NLTK.

$ sudo apt-get install python3-pip 
$ sudo pip3 install pyyaml 
$ wget http://www.nltk.org/nltk3-alpha/nltk-3.0a3.tar.gz 
$ tar -xzvf nltk-3.0a3.tar.gz 
$ cd nltk-3.0a3/ 
$ sudo python3 setup.py install 
$ python3 
>>> import nltk 
>>> from nltk.corpus import brown 
>>> print(brown.sents()[0]) 
['The', 'Fulton', 'County', 'Grand', 'Jury', 'said', 'Friday', 'an', 'investigation', 'of', "Atlanta's", 'recent', 'primary', 'election', 'produced', '``', 'no', 'evidence', "''", 'that', 'any', 'irregularities', 'took', 'place', '.'] 
0

Se si sta parlando di shell, come in Linux, se si installa Python 3, è possibile richiamare separatamente con il comando python3. Python 2 viene semplicemente invocato usando python.

Almeno questa è la mia esperienza con sistemi simili a Ubuntu, non ho usato altri ambienti Linux.

Mi rendo conto che questa domanda è vecchia di quasi un anno, ma NLTK è stato portato su Python 3 (o almeno questo era vero al momento della stesura di questo).

0

Dai uno sguardo allo WinPython, una distribuzione python portatile/installabile per Windows.

portatile: preconfigurato, dovrebbe funzionare out of the box su qualsiasi macchina Windows (senza alcun requisito) e la cartella contenente WinPython può essere spostato in qualsiasi posizione (locale, di rete o un'unità rimovibile) con la maggior parte delle impostazioni dell'applicazione

flessibile: si può installare (o dovrei scrivere "uso", come è portatile) il maggior numero di versioni WinPython se necessario (come ambienti isolati e auto-consistenti), anche se tali versioni sono in esecuzione diversi versioni di Python (2.7, 3.3) o diverse architetture (32bit o 64bit) sulla stessa macchina

Consente inoltre di registrare e annullare la registrazione di una determinata versione di Python come predefinita di sistema.

Ma anche lavorando come portatile, puoi creare una scorciatoia del file eseguibile Python e metterla da qualche parte nel tuo percorso. Basta nominare le scorciatoie di diverse versioni con nomi diversi. Quindi puoi semplicemente usare:

python_3_64bit_shortcut your_program.py 
Problemi correlati