Visualizzazione post con etichetta Pyenv. Mostra tutti i post
Visualizzazione post con etichetta Pyenv. Mostra tutti i post

martedì 13 maggio 2014

Disinstallare Python da pyenv

Nella serie di post precedenti avete imparato a configurare la/le versioni di Python da usare con pyenv al livello di granularità richiesto:


Vediamo adesso come disinstallare le versioni di Python che non ci interessano più. Usate

pyenv uninstall 2.7.6

per eliminare solo la versione indicata. Ripetete il comando per ogni versione installata che volete disinstallare. Potrebbe capitare che non vi ricordiate quali versioni di Python avete installato sulla vostra macchina. Chiedetelo a pyenv:

pyenv versions

Se volete, la dinstallazione potete farla anche manualmente. Si tratta di una semplice cancellazione della directory che contiene la versione che vogliamo disinstallare tramite il comando:

rm -rf nome_directory

Per esempio, supponiamo di voler eliminare Python 2.7.6 precedentemente installato. Dov'è la directory che la contiene? Chiediamolo a pyenv:

pyenv prefix 2.7.6

La risposta è:

~/.pyenv/versions/2.7.6

Eccola lì, basta cancellare questa directory ed il gioco è fatto:

rm -rf ~/.pyenv/versions/2.7.6

Allo stesso modo si procede per qualunque altra versione di Python, basta ricordare che in generale ogni versioni di Python è installate nella directory:

~/.pyenv/versions/numero_versione

E se non ve lo ricordate non è un problema, usate pyenv prefix e avrete il percorso completo della directory da cancellare.

martedì 17 dicembre 2013

Come aggiornare Pyenv

Dopo aver configurato Python a livello locale, non vi resta che tenere aggiornata l'installazione di pyenv. Il suo aggiornamento si rende necessario quando:
  • sono stati corretti dei bug;
  • è disponibile una nuova versione di Python.
In questo secondo caso ve ne potete rendere conto dal fatto che chiedendo la lista delle versioni Python disponibili per l'installazione, la nuova versione non risulta nell'elenco.

Per procedere con l'aggiornamento di pyenv, aprite un terminale e date i comandi:

cd ~/.pyenv
git pull


Tutto qui, avete finito.

Tenete solo presente una cosa: se la nuova versione continua a non apparire anche dopo l'aggiornamento, significa che lo sviluppatore di pyenv può non aver ancora fatto in tempo ad aggiornare il repository dell'applicazione. Riprovate successivamente.

venerdì 13 dicembre 2013

Configurazione di Python tramite pyenv a livello di shell

Nel post precedente ci siamo occupati della configurazione di Python con pyenv a livello locale, cioè della versione di Python da avviare al livello di una specifica directory.

In questo post invece ci occupiamo dell'ultima e più specifica di tutte le impostazioni che pyenv vi permette, quella a livello di shell (terminale): grazie ad essa potete specificare quale versione di Python usare a livello di ogni singolo terminale che aprite sul vostro sistema.

Lo fate tramite il comando

pyenv shell 3.3.3

che ad esempio imposta l'uso di Python 3.3.3 per la sola shell corrente, sovrascrivendo quindi sia le impostazioni a livello globale, sia a livello locale eventualmente già configurate.

Come sempre si possono impostare più versioni di Python contemporaneamente con

pyenv shell 2.7.6 3.3.3

mentre

pyenv shell

senza ulteriori indicazioni restituisce le versioni di Python attive nella shell corrente:

2.7.6:3.3.3

Non si tratta di un errore, le versioni attive in questo caso sono visualizzati in questo modo un po' diverso dal solito.

Le impostazioni valgono per quella shell finché resta aperta. Una volta chiusa tutte le impostazioni andranno perse e resteranno attive solo quelle globali e locali perché queste sono registrate su file, rispettivamente nel file ~/.pyenv/version per quella globale, e nel file .pyenv-version della directory corrente per quella locale.

Se volete annullare le impostazioni fatte finora senza chiudere la shell usate

pyenv shell --unset

e riprenderanno a funzionare le impostazioni locali se precedentemente configurate, altrimenti quella globale.

giovedì 12 dicembre 2013

Configurazione di Python tramite pyenv: livello locale

In questo post continuiamo la chiacchierata iniziata in quello precedente parlando della configurazione di Python tramite pyenv a livello locale.

Immaginate un vostro progetto che ha bisogno di usare una specifica versione di Python differente da quella globale: potete impostare questa versione perché si avvii solo nella directory che ospita il vostro progetto, in tutte le altre continueranno ad avviarsi le solite versioni.

Questo vuol dire che le impostazioni locali prevalgono su quelle globali, tenetelo sempre a mente.

Per impostare Python a livello locale si usa il comando

pyenv local 2.7.6

che ad esempio imposta Python 2.7.6 per la directory corrente.

Il comando fa anche altro: crea se non esiste, altrimenti lo aggiorna, il file .pyenv-version e dentro vi scrive una stringa uguale alla versione di Python da avviare in quella directory, in questo caso sarà "2.7.6".

Ogni volta che avvierete Python, pyenv controllerà prima la presenza di questo file nella directory corrente, se lo trova avvierà la versione corrispondente a quella stringa. Se non trova il file si rifà invece alle impostazioni globali.

Esattamente come a livello globale si possono impostare più versioni di Python anche a livello locale:

pyenv local 2.6.9 2.7.6

Invece il comando

pyenv local

senza ulteriori parametri, restituisce la/le versioni correntemente attive di Python per la directory corrente:

2.6.9                     
2.7.6

Se volete eliminare la configurazione locale di una directory, aprite il terminale in quella directory e date il comando:

pyenv local --unset

E anche per il livello locale è tutto. Nel prossimo post si parlerà invece dell'ultimo livello di controllo, quello più fine che pyenv permette: stabilire quale/quali versioni di Python avviare a livello di singola shell.

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.

martedì 3 dicembre 2013

Installazione di Python con Pyenv

Dopo aver visto come installare pyenv sul vostro sistema (se non l'avete fatto leggete il post, ci sono un po' di dipendenze da installare prima di procedere con le indicazioni che trovate qui), iniziamo finalmente ad usarlo per renderci ancora più facile e divertente la vita di sviluppatori Python.

Se vi state chiedendo perché mai pyenv dovrebbe avere tale effetto, allora non avete letto il post di presentazione di pyenv. Fatelo, vi aiuterà a chiarirvi le idee su cos'è e cosa fa.

In questo post vedremo invece come usare usare pyenv per installare una o più versioni di Python. Ma quali sono le versioni disponibili in pyenv? Chiedeteglielo:

pyenv install --list
Available versions:
  2.4
...
  2.4.6
  2.5
  2.5.1
...

  2.7.6
...
  3.3.3
  3.3-dev
...

  3.4.0b1
  3.4-dev
  jython-2.5.0
...
  pypy-1.5
...

  pypy3-2.1-beta1
  pypy3-2.1-beta1-src
...
  stackless-2.7.2
...

  stackless-3.3-dev
  stackless-dev


Come potete notare, nonostante la lista sia stata abbondantemente tagliata è comunque molto lunga. Si parte da Python 2.4 risalente al 2004, fino al 3.4 ancora in fase di sviluppo nel momento in cui scrivo, passando per versioni particolari come PyPy.

Fate attenzione: potrebbe accadere che sia stata rilasciata una nuova versione di Python eppure nella lista non c'è. Ci possono essere 2 motivi per cui questo accade:
  1. è già da un po' che avete installato pyenv sul vostro computer ed è ora di aggiornarlo;
  2. la nuova versione è stata appena rilasciata. In questo caso date prima il tempo all'autore di aggiornare pyenv su github e poi tornate al punto 1.
Negli esempi che seguono installerete:
  • Python 2.6.9;
  • Python 2.7.6;
  • Python 3.2.5;
  • Python 3.3.3.
Perché così tante versioni? Perché ci serviranno per vedere tutte le caratteristiche di pyenv nei prossimi post, sopratutto quella che è il suo punto di forza: l'enorme flessibilità e facilità con cui riesce a gestire contemporaneamente più versioni di Python.

Aprite una shell (terminale) e iniziamo con l'installazione di Python 2.7.6 che avverrà nella directory ~/.pyenv della vostra home:

pyenv install 2.7.6

In modo del tutto automatico partirà il dowload e poi la compilazione dei sorgenti Python:

Downloading Python-2.7.6.tgz...
Installing Python-2.7.6...


Mettetevi comodi: a seconda della velocità della vostra connessione Internet e la potenza del vostro sistema, potrebbero servire anche diversi minuti per completare l'installazione di Python.

Ne approfitto per ricordarvi che il download non avviene dal sito ufficiale di Python, bensì dal mirror dedicato di pyenv.

Terminata l'installazione riceverete il messaggio

Installed Python-2.7.6 to ~/.pyenv/versions/2.7.6

che vi indica cosa è stato installato (Python-2.7.6) e dove (~/.pyenv/versions/2.7.6), e automaticamente parte anche l'installazione del bonus offerto da pyenv.

Si tratta dell'installazione di pip, il gestore di pacchetti Python che dalla versione 3.4 è disponibile di default:

Downloading setuptools-1.4.tar.gz...
-> https://pypi.python.org/packages/source/s/setuptools/setuptools-1.4.tar.gz
Installing setuptools-1.4...

Installed setuptools-1.4 to ~/.pyenv/versions/2.7.6

Downloading pip-1.4.1.tar.gz...
-> https://pypi.python.org/packages/source/p/pip/pip-1.4.1.tar.gz
Installing pip-1.4.1...

Installed pip-1.4.1 to ~/.pyenv/versions/2.7.6

Ora dovete informare pyenv dell'installazione del nuovo Python sul vostro sistema. Lo fate con il comando:

pyenv rehash

E con questo avete appena finito di installare Python 2.7.6. Facile, vero? Procedete allo stesso modo per installare anche Python 3.3.3 con il comando

pyenv install 3.3.3
pyenv rehash

poi proseguite con la 2.6.9 e la 3.2.5 e avete finito.

Pyenv è davvero potente e facile da usare! Potete finalmente installare tutte le versioni di Python che volete in pochi attimi. Potete pensare di usare finalmente sempre la versione più aggiornata senza doversi lanciare in compilazioni da sorgente litigando con dipendenze insoddisfatte, ne dovete aspettare che qualche anima pia, se c'è, crei i pacchetti per la vostra distribuzione e vi cavi d'impaccio.

Ma sopratutto, potete fare tutto senza andare a interferire con i file di sistema della vostra distribuzione che resta li intonsa e lontana dal pericolo di malfunzionamenti.

Nel prossimo post vedremo come usare pyenv per configurare una o più versioni di Python per poterle usarle nello sviluppo dei vostri programmi.

venerdì 29 novembre 2013

Installazione di Pyenv, il tool per la gestione di versioni multiple di Python

Dopo l'ampia presentazione di pyenv, il tool per installare e gestire in contemporanea più versioni di Python, vediamo ora come installarlo sulla vostra macchina di sviluppo.

Prima due piccole precisazioni:
  1. pyenv è basato su script Bash, per cui a differenza di tools simili, potete installarlo anche su macchine su cui Python non è presente. Indubbiamente un grande vantaggio;
  2. l'installazione non scarica i file originali dal sito ufficiale Python, bensì dal mirror dedicato di pyenv.
Detto questo, procediamo.

Aprite una shell (terminale) e installiamo le dipendenze per poter compilare correttamente i sorgenti di Python.

Per Ubuntu, Debian e distribuzioni derivate:

sudo apt-get install build-essential libreadline-dev libncursesw5-dev libssl-dev libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev git

Per Fedora e derivate:

date il comando su e inserite la password amministrativa quando richiesto, poi date il comando

yum install gcc zlib-devel bzip2 bzip2-devel readline-devel sqlite sqlite-devel openssl-devel tk-devel gdbm-devel ncurses-devel glibc-devel git

Bene, sistemate le dipendenze iniziamo l'installazione vera e propria che avverrà nella directory ~/.pyenv nella vostra home creata automaticamente dall'installazione.

Clonate il repository git di pyenv,

cd
git clone git://github.com/yyuu/pyenv.git .pyenv


e modificate alcune variabili d'ambiente per renderlo funzionante.

Solo per Ubuntu, Debian e derivate:

echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc


e abilitate shims (spiegherò in un eventuale altro post di cosa si tratta) e  l'autocompletamento per pyenv:

echo 'eval "$(pyenv init -)"' >> ~/.bashrc

Per utenti di shell Zsh: nei precedenti comandi sostituite ~/.bashrc con ~/.zshenv

Per gli altri: nei precedenti comandi sostituite ~/.bashrc con ~/.bash_profile

Avete finito.

Per essere sicuri che tutte le modifiche siano state fatte correttamente, riavviate il sistema e nel terminale date il comando:

pyenv

Se la risposta che ottenete è qualcosa di simile a

pyenv 0.4.0-20131116-8-gbc2d245
Usage: pyenv <command> [<args>]

...

allora pyenv funziona.

Nel prossimo post vedremo come usarlo per installare una o più versione di Python sul nostro sistema.

lunedì 25 novembre 2013

Anteprima pyenv, il tool per installare e gestire più versioni di Python

Pyenv è un tool per l'installazione e la gestione di versioni multiple di Python su sistemi Unix/Linux e Mac OS X.

Grazie a pyenv potete installare tutte le versioni che volete di Python a partire dalla vecchissima 2.4, credo risalga al 2004, fino alla versione 3.4 ancora in fase di sviluppo nel momento in cui scrivo.

La facilità d'installazione è davvero disarmante: basta un comando con l'indicazione della versione di Python che volete sul vostro sistema, e a tutto il resto ci pensa pyenv.

Vi scarica il sorgente di Python, ve lo compila, e vi installa il tutto in un'apposita directory creata in automatico nella home dell'utente, così da non sporcare l'installazione di default di Python eventualmente già presente sul vostro sistema.

Ad esempio sulla mia Ubuntu 12.04 LTS ho già installati Python 2.7.3 e Python 3.2.3 direttamente dai repository della distribuzione. Grazie a pyenv ho installato anche la versione 2.7.6 e la 3.3.3 senza che esse interferiscano minimamente con le altre.

La comodità dell'installazione di Python con pyenv è eccezionale, ma il meglio deve ancora arrivare perché pyenv tira fuori il meglio di se quando lo usate per gestire quale versione o versioni, si, anche più d'una contemporaneamente, volete usare sul vostro sistema.

Ad esempio, potete sostituire l'uso della versione 2.7.3 con la 2.7.6 in tutto il sistema, oppure solo in una specifica directory: quando siete in questa directory, se avviate Python parte la versione 2.7.6 come qui sotto,

$ python
Python 2.7.6 (default, Nov 22 2013, 09:22:29)
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.


ma appena uscite da questa directory riprende a funzionare la solita 2.7.3:

$ python
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.


E se volete, potete arrivare ad una granularità così fine da configurare l'uso di una certa versione di Python solo all'interno della shell (terminale) corrente.

Ma non finisce qui, perché come vi dicevo, nulla vi vieta di configurare l'uso di più versioni di Python contemporaneamente, ad esempio la 2.6, 2.7 e la 3.3, così da poter ad esempio fare delle prove e assicurarvi che il vostro software sia compatibile con tutte e tre:

$ 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.


$ python2.7
Python 2.7.6 (default, Nov 22 2013, 09:22:29)
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.


$ 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.


Non vi ho ancora convinti della bontà di pyenv?

Allora sappiate che in ogni versione di Python che pyenv installa sul vostro sistema ci trovate anche pip, il gestore di pacchetti Python che dalla versione 3.4 è disponibile di default.

A questo punto anche l'installazione di ulteriori pacchetti Python, da Django passando per SciPy fino a PIL/Pillow e tutto il resto dell'immenso repository che è PyPI (Python Package Index) con i suoi 37036 pacchetti al momento in cui scrivo (e continua a crescere), diventa questione di un solo comando pyenv: poi come al solito ci pensa lui a tutto il resto.

Non vi ho ancora convinti a provare pyenv? Caspita quanto siete difficili! :-D
Allora è arrivato il momento di metter giù il carico da 90.

Che ne dite se con pyenv oltre a pip, il gestore di pacchetti Python, potete usare anche virtualenv, il tool per la creazione di ambienti virtuali Python? Non direttamente, per farlo bisogna prima installare un apposito plugin, pyenv-virtualenv, ma è questione di attimi ed una volta fatto gestire virtualenv diventa un gioco da ragazzi.

Grazie a virtualenv potete creare uno o più ambienti virtuali Python completamente isolati dal resto del sistema così da non interferire con esso. In ognuno di questi ambienti virtuali avrete una copia del Python di sistema su cui installare tutte le librerie che volete, e nella versione che più vi aggrada.

Per esempio, in un ambiente virtuale installate Django 1.5, in un altro la versione 1.6, e tutto questo senza che si crei il minimo conflitto tra di loro, ne con le librerie di sistema perché ognuna ha il suo ambiente virtuale completamente isolato da tutto il resto.

Il limite di questa soluzione è che comunque la vostra scelta della versione di Python disponibile nell'ambiente virtuale è limitata a quelle installate sul sistema. Ad esempio, sulla mia Ubuntu 12.04 sono le già citate versioni 2.7.3 e 3.2.3

Ma l'accoppiata pyenv + virtualenv gestito tramite il plugin pyenv-virtualenv è così potente che permette di superare questo limite: potete creare un ambiente virtuale scegliendo la versione di Python su cui costruirlo sia fra quelle di sistema, sia fra tutte quelle disponibili e installate in pyenv stesso, che lo ricordo vanno dalla 2.4 alla 3.4, e altre si aggiungeranno in futuro man mano saranno rese disponibili dalla comunità Python.

Per esempio, potreste costruire 3 ambienti virtuali completamente separati con:
  • Python 2.6 + Django 1.4;
  • Python 2.7 + Django 1.5;
  • Python 3.3 + Django 1.6;
Avete la totale libertà di scelta sia per quanto riguarda la versione Python da usare, sia per quanto riguarda le versioni delle varie librerie/moduli/framework che potete usare nel vostro lavoro: niente male, vero?

Un'ultima chicca: essendo basato su script Bash, pyenv non ha bisogno di Python per funzionare. Questo significa che potrete installarlo anche su macchine dove Python non è presente e godere lo stesso di tutti i vantaggi che abbiamo visto fin qui.

Su, ci dovremmo essere, dovreste ormai esservi convinti a provare pyenv.

Nella serie di post che seguiranno vedremo come installare e usare pyenv per renderci ancora più comoda e divertente la vita da programmatori Python.