lunedì 30 dicembre 2013

Risorse Python: aggiornamento 8 - differenze Python 2.x/3.x

Nell'ottavo aggiornamento della pagina Risorse Python del blog ho inserito link a materiale sulle differenze tra Python 2.x e 3.x, uno dei problemi che lo sviluppatore Python prima o poi si trova ad affrontare nell'attuale fase di transizione fra le due versioni.

Aggiornamenti anche per la sezione Esempi di codice con un po' di snippet di pronto intervento quando non ricordate qualche aspetto base del linguaggio.


sabato 28 dicembre 2013

Risorse Python: aggiornamento 7 - tutorial PyMOTW anche in italiano

Settimo aggiornamento per la pagina Risorse Python del blog con l'inserimento di Python Module of the Week, noto anche come PyMOTW, un tour guidato sulla Python Standard Library creato da Doug Hellmann.

Ricco di spiegazioni semplici e dettagliate, accompagnate da abbondanti esempi di codice, lo mettono alla portata anche di chi conosce solo le basi di Python e vuole passare al gradino successivo del suo apprendimento. E se l'inglese non è il vostro forte, c'è una versione italiana di PyMOTW.

Viste le caratteristiche, aggiunto sia nella sezione Libri inglese - da altri linguaggi che nella sezione Tutorial.

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.

lunedì 16 dicembre 2013

Risorse Python: aggiornamento 6 - Tkinter

Sesto aggiornamento per la pagina Risorse Python del blog interamente dedicato a Tkinter, l'interfaccia Python standard a Tk, il toolkit per interfacce utente grafiche (GUI).

Guide, tutorial e reference per Tkinter di cui oltre la metà sono in italiano, le prime nella lista, e tutte comunque liberamente scaricabili/consultabili in rete.

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.

lunedì 9 dicembre 2013

Risorse Python: aggiornamento 5 - Git

Quinto aggiornamento per la pagina "Risorse Python" del blog con l'aggiunta, nella sezione Version Management, di Git, il sistema di versioning distribuito creato da Linus Torvalds, il padre di Linux.

Per coloro che hanno bisogno di documentazione sul come usarlo, ho aggiunto i link ad un paio di guide davvero carine e tradotte anche in italiano, più altre in inglese ed un paio di Cheat Sheet molto comodi per la consultazione veloce quando non ricordiamo un comando o la sequenza di comandi da usare nel nostro flusso di lavoro.

Per chi invece cerca qualcosa di più corposo c'è il libro "Pro Git" di Scott Chacon, ed il link alla guida che ho scritto sul forum di Python per averne una versione ePub o Mobi (per Kindle Fire) anche in italiano.

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.