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.

sabato 23 novembre 2013

Sezione "Risorse Python" del blog: aggiornamento 4

Quarto aggiornamento per la sezione "Risorse Python" del blog. Ho aggiunto:
  • la nuova sezione "Environment Management" con la prima entry, pyenv;
  • la nuova sezione "Package Management" con la prima entry, pip.
Pyenv è un tool per la gestione di installazioni multiple di Python su sistemi Unix/Linux, Mac OS X.

Immaginate di voler installare sul vostro sistema diverse versioni di Python, ad esempio le versioni 2.6.9, 2.7.6 e 3.3.3 per essere sicuri che il vostro software non abbia problemi di compatibilità: ecco, pyenv fa al caso vostro.

Potrete scegliere quale versioni di Python usare, a partire dalla vetusta 2.4 fino alla 3.4 in questo momento ancora in fase di sviluppo. Potrete decidere se usare una certa versione a livello globale o solo per una specifica directory, o anche solo per il terminale che state usando in quel momento. Potrete impostare l'uso contemporaneo di più versioni di Python.

E se qualcuno dovesse chiedersi "ma non è quello che fa virtualenv?", la risposta è no, fanno cose diverse ma che si completano a vicenda.

Comunque di pyenv ne parlerò in una serie di prossimi post per cui sarà chiara la differenza.

Pip invece è un tool per l'installazione e gestione di pacchetti software Python in ambienti Unix/Linux, OS X, Windows.

Chi usa Python per lo sviluppo forse conosce e usa già EasyInstall a questo scopo, ma pip ha una marcia in più, e dalla versione 3.4 di Python è disponibile di default nell'installazione standard.

Se vi aggiungiamo il fatto che anche pyenv in ogni installazione Python che gestisce vi installa pip in modo predefinito, abbiamo due buoni motivi in più per dargli un'occhiata.

mercoledì 20 novembre 2013

Sezione "Risorse Python" del blog: aggiornamento 3

Terzo aggiornamento per la sezione "Risorse Python" del blog. Ho aggiunto:
  • il videocorso "Google's Python Class" di Google Developers per Python 2.x;
  • il corso universitario online del MIT OpenCourseWare tenuto da John Guttag, "6.00SC Introduction to Computer Science and Programming", sempre con Python 2.x.

martedì 19 novembre 2013

Rilasciata nuova release Python 3.3.3

Nuovo aggiornamento per il ramo 3.x: è stata rilasciata la versione 3.3.3 di Python con numerosi bugfix.

C'è anche da ricordare che questa versione rispetto alla precedente 3.2, apporta ulteriori miglioramenti al linguaggio che lo rendono una scelta sempre più interessante rispetto al precedente ramo 2.x.

Sezione "Risorse Python" del blog: aggiornamento 2

Secondo aggiornamento per la sezione "Risorse Python" del blog: ho aggiunto il videocorso di Marco Beri su Python 2.x.

sabato 16 novembre 2013

Pip disponibile di default a partire da Python 3.4

Per chi non lo conoscesse, pip è un tool per l'installazione e la gestione di pacchetti Python disponibile per sistemi operativi Unix/Linux, OS X, Windows, e versioni Python a partire da 2.6, passando per 2.7, 3.1, 3.2, fino all'ultima 3.3 e senza lasciare fuori PyPy.

È perfetto per evitare di doversi barcamenare con modalità diverse d'installazione a seconda del sistema operativo, e permette una gestione molto raffinata dei pacchetti.

La cosa non esaltante è che al momento va installato separatamente dopo l'installazione di Python sulla vostra macchina di sviluppo.

La buona notizia è che dalla versione 3.4 di Python pip sarà disponibile di default nell'installazione standard.

domenica 10 novembre 2013

Rilasciata nuova release Python 2.7.6

È stata rilasciata la versione 2.7.6 di Python.

Com'è noto non sono previste nuove feature, si tratta esclusivamente di bugfix che andranno avanti fino alla versione finale, la 2.7.9 prevista per Maggio 2015.

A quel punto lo sviluppo del ramo 2.x potrà dirsi definitivamente concluso e si continuerà sul solo ramo 3.x.

sabato 9 novembre 2013

Six: libreria per la compatibilita tra Python 2.x e Python 3.x

Uno dei dilemmi per chi inizia a studiare/usare Python è se concentrarsi su Python 2 oppure il più recente Python 3. Spesso la scelta è a favore del primo perché, fra gli altri motivi, alcune librerie/framework non supportano ancora Python 3.

Con la libreria di compatibilità Six, il cui nome deriva da 2 * 3 = 6, il prodotto dei numeri delle versione di Python coinvolte, è stato creato un wrapper che nascondendo le differenze permette a molte di queste librerie/framework di funzionare con entrambi le versioni di Python.

Tanto per dire, Django dalla versione 1.5 usa proprio Six per garantirsi la compatibilità sia con Python 2 (≥ 2.6.5) che con Python 3 (≥ 3.2).

La storia di Python raccontata dal suo creatore

Guido van Rossum che racconta la storia della sua creatura.

Buona visione.

Aggiornata la sezione Risorse Python del blog

Ho aggiornato la pagina delle "Risorse Python" di questo blog, ora contiene tutto il materiale indispensabile per iniziare nel modo migliore a studiare Python.

Ho suddiviso il tutto in 4 sezione a seconda sia delle competenze informatiche che linguistiche:
  • Libri Italiano - da zero
  • Libri Italiano - da altri linguaggi
  • Libri Inglese - da zero
  • Libri Inglese - da altri linguaggi
Tenete presente che molti dei libri indicati sono liberamente scaricabili.

Se trovate link non funzionanti, errori, omissioni, o volete segnalare risorse che a vostro avviso sono interessanti, usate i commenti che trovate alla fine di quella pagina.

venerdì 1 novembre 2013

Il miglior libro per imparare Python

È una domanda che in varie forme è stata spesso posta sul forum italiano di Python.
La risposta breve è: non esiste.

Molto dipende dalle conoscenze pregresse del lettore, sia informatiche che linguistiche.
Essenzialmente abbiamo:
  • programmatore alle prime armi;
  • programmatore proveniente da altri linguaggi;
  • legge solo in italiano;
  • legge anche in inglese.
Tenendo presente questo, il mio personale punto di vista su quale sia il miglior libro per imparare Python. Lo terrò aggiornato man mano ci saranno nuove pubblicazioni e me ne sarò fatto un'idea.

Quegli stessi libri e molto altro ancora, per esempio tutorial, video, anche interi corsi universitari in Python, li trovate nella sezione "Risorse Python" del blog.