Utilizzando diverse versioni di Python


21

Contesto :

Dal momento che sviluppo programmi Python che devono essere eseguiti su diverse versioni di Python, ho installato diverse versioni di Python sul mio computer.

Sto usando FC 13, quindi è arrivato con Python 2.6 preinstallato in /usr/bin/python2.6e /usr/lib/python2.6.

Ho installato Python 2.5 dal sorgente e, per mantenere le cose pulite, ho usato l' --prefix=/usropzione, che ha installato Python in /usr/bin/python2.5e /usr/lib/python2.5.

Ora, quando eseguo il pythonmio prompt mostra che sto usando la versione 2.5. Tuttavia, sto riscontrando alcuni problemi con l'installazione.

Gestione del pacchetto :

Utilizzando easy_install, i pacchetti vengono sempre installati in /usr/lib/python2.6/site-packages/. Ho scaricato setuptools.egg per Python 2.5 e ho provato a installarlo, ma mi dà un errore:

/usr/lib/python2.5/site-packages does NOT support .pth files

Sembra che python2.5 non sia nel mio PYTHONPATH. Pensavo che l'installazione predefinita si sarebbe aggiunta a PYTHONPATH, ma quando scrivo echo $PYTHONPATHa promt, ricevo solo una riga vuota.

Risposte:


20

Il modo consigliato di avere più versioni di Python installate è installarle ognuna dalla sorgente: coesisteranno felicemente. È quindi possibile utilizzare virtualenv con l'interprete appropriato per installare le dipendenze richieste (utilizzando pip o easy_install). Il trucco per una più semplice installazione di più interpreti dalla sorgente è usare:

sudo make altinstall

invece del solito "sudo make install". Questo aggiungerà il numero di versione all'eseguibile (quindi avresti python-2.5, python-2.6, python-3.2 ecc.) Prevenendo così qualsiasi conflitto con la versione di sistema di Python.


2
Altinstall + virtualenv = nirvahna di sviluppo python. Grazie!
Alex

13

Sembra un'applicazione perfetta per virtualenv , uno strumento molto popolare per la creazione di ambienti Python isolati. Questo è un comando di esempio per specificare la versione di Python

$ virtualenv --python=/usr/bin/python2.6 myvirtualenv

Non credo virtualenvsia la soluzione in questo caso. Vedi la mia risposta
Piotr Dobrogost,

5

Utilizzando easy_install, i pacchetti sono sempre installati in /usr/lib/python2.6/site-packages/

Questo perché distutils aggiunge una riga shebang a tutti gli script installati. Se si esegue easy_installdirettamente lo script, questo viene eseguito con l'interprete con cui è stato installato (secondo la riga di shebang). Ciò che easy_installviene eseguito dipende dal tuo PATHno PYTHONPATH. Se si desidera installare un pacchetto nell'istanza di Python 2.5, è necessario eseguire easy_installspecificando l'interprete Python da utilizzare:

/usr/bin/python2.5/python easy_install ...

A rigor di termini virtualenvqui non aiuta in quanto deve essere creato nel contesto di Python di base che è esattamente lo stesso problema con l'esecuzione easy_install. Ecco a cosa serve l' --pythonargomento virtualenv. Per qualche motivo easy_installnon fornisce argomenti analoghi, quindi deve essere eseguito con un interprete Python specifico come mostrato sopra.


È la mia prima risposta qui e spero anche il primo distintivo del Negromante :)
Piotr Dobrogost,

Ottima spiegazione, grazie! Distintivo del Negromante ben guadagnato;)
Alex

2

Sto anche usando Fedora 13 e PYTHONPATHnon è impostato.

All'interno di Python, sys.pathti verrà fornito un elenco dei percorsi utilizzati per l'importazione degli script.

Non ho familiarità con il modo in cui easy_installdecide la sua directory di destinazione, ma sono sicuro che ci sarebbe un argomento da riga di comando che potresti dargli.

Prova a specificare la versione di Python da eseguire easy_installprecedendo il tuo comando con il percorso completo del Python che desideri.

Controlla anche se easy_installc'è un link simbolico nel cestino a uno script all'interno di una versione di Python che hai installato.


1

Virtualenv è sicuramente una manna dal cielo qui.

Nella mia installazione, ho la variabile di ambiente VIRTUALENV_USE_DISTRIBUTEimpostata su 1, in modo che venga utilizzato il pacchetto Distribute più moderno invece di setuptools. Ho creato ambienti virtuali per le due versioni di Python sul mio sistema in questo modo:

$ virtualenv -p python2.6 py2
$ virtualenv -p python3.2 py3

Ho quindi creato tre alias in .bashrc:

alias py2='source $HOME/py2/bin/activate'
alias py3='source $HOME/py3/bin/activate'
alias idle='python -m idlelib.idle'

Quindi posso usare py2per passare a un valore predefinito di Python 2.6 e py3passare a un valore predefinito di Python 3.2. L'immissione idleverrà eseguita indipendentemente dalla versione di IDLE appropriata per l'ambiente virtuale in cui mi trovo.

L'installazione di pacchetti in uno di questi ambienti virtuali di solito comporta solo un pip installcomando.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.