giovedì 5 dicembre 2013

Configurazione di Python tramite pyenv: livello globale

Nel post sull'installazione di Python con Pyenv avete installato quattro diverse versioni di Python. La sola installazione non è però sufficiente per poterle usare con i vostri programmi, dovete prima configurarle: vediamo come.

Pyenv è così elastico nelle configurazioni da poter scegliere quante e quali versione di Python usare, e sopratutto, a quale livello:
  • livello globale, cioè in tutte le shell (terminali);
  • livello locale, cioè quando il terminale si trova in una specifica directory. Sovrascrive la scelta globale;
  • livello di singola shell. Vale solo nella shell corrente, quella che state usando, e sovrascrive tutte le scelte precedenti.
In questo post ci occuperemo di configurare Python a livello globale, per gli altri livelli ci saranno post dedicati.

Per la configurazione a livello globale si usa il comando

pyenv global 2.7.6

che ad esempio imposta a livello globale l'uso di Python 2.7.6.

Il comando crea inoltre, se non esiste già, il file ~/.pyenv/version. Al suo interno pyenv vi scrive il numero di versione di Python che volete usare a livello globale.

Quello che fa è semplicemente aggiungere nel file una stringa, in questo caso "2.7.6", in modo che quando invocherete nuovamente Python in un terminale qualunque (da cui appunto globale), pyenv sa già quale versione avete impostato.

Per configurare più versioni di Python contemporaneamente, usate il comando pyenv global in questo modo:

pyenv global 2.6.9 2.7.6 3.2.5 3.3.3

Ecco, avete appena configurato il vostro sistema affinché a livello globale usi tutte le versioni di Python che avevate installato in pyenv seguendo le istruzioni del post precedente.

Se al comando pyenv global non fate seguire nulla, esso restituisce le versioni globali correntemente configurate:

pyenv global

2.6.9
2.7.6
3.2.5
3.3.3

Eccole lì, tutte le versioni installate sono presenti e pronte all'uso. Bene, facciamo qualche prova.

Avviate la versione 2.6 di Python:

python2.6

Python 2.6.9 (unknown, Nov 22 2013, 22:52:18) 
[GCC 4.6.3] on linux3
Type "help", "copyright", "credits" or "license" for more information.

Provate ora ad avviare la versione 2.7:

python2.7

Python 2.7.6 (default, Nov 26 2013, 10:15:44) 
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.

La 3.2:

python3.2

Python 3.2.5 (default, Dec  3 2013, 08:43:37) 
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.

La 3.3:

python3.3

Python 3.3.3 (default, Nov 22 2013, 09:28:26) 
[GCC 4.6.3] on linux
Type "help", "copyright", "credits" or "license" for more information.

Tutte rispondono all'appello.

Ma se avviate la generica versione 2 di Python, quale parte? La 2.6 o la 2.7? Controlliamo:

python2

Python 2.7.6 (default, Nov 26 2013, 10:15:44) 
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.

Parte quella più recente. E avviando la generica versione 3 quale parte? La 3.2.5 o la 3.3.3? Vediamo:

python3

Python 3.2.5 (default, Dec  3 2013, 08:43:37) 
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.

Questa volta parte la versione meno recente, la 3.2.5.

Ricapitolando: se viene chiamata la generica versione 2 di Python parte quella più recente, se invece viene chiamata la generica versione 3, parte la versione meno recente. Per non confondervi con questo comportamento di pyenv indicate sempre esplicitamente la versione di Python che volete avviare, per esempio:

python3.3

Per tornare ad usare la versione di default di Python, quella predefinita della vostra distribuzione che stavate usando prima di pyenv, basta dare il comando:

pyenv global system

"system" è un nome speciale che dice a pyenv di riprendere ad usare le versioni di default sul sistema, ed infatti se ora chiedete cosa è configurato a livello globale,

pyenv global

otterrete:

system

Riprovando ad avviare Python notate adesso i numeri di versione:

python2

Python 2.7.3 (default, Sep 26 2013, 20:03:06)
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.

python3

Python 3.2.3 (default, Sep 25 2013, 18:22:43)
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.

Sono cambiati, sono nuovamente Python 2.7.3 e 3.2.3, i default di Ubuntu 12.04 LTS, sul vostro sistema naturalmente ricomparirà la vostra versione precedentemente installata.

Anche per questa volta è tutto, ma le magie di pyenv non sono finite. Continueranno nel prossimo post dove ci occuperemo di configurare Python a livello locale, cioè a livello di singola directory.

Se ad esempio un vostro progetto ha bisogno di usare una specifica versione di Python differente da quella globale, potete configurare la versione necessaria solo per la directory che ospita il vostro progetto, a livello globale continueranno a funzionare le versioni già impostate.