Oggi parliamo di Python e l’installazione di una virtualenv (virtual environment);
Cosa è una virtualenv?
Virtual Env è uno strumento in grado di creare diversi ambienti di sviluppo. Anzichè “riempire” il sistema principale di librerie che potrebbero risultare inutilizzate per la maggior parte del tempo, utilizzando una o più virtual env potremmo creare diversi ambienti con librerie differenti in base alle nostre esigenze.
Facciamo un esempio pratico… immaginiamo di dover sviluppare due applicativi, uno di manipolazione delle immagini, l’altro di “calcoli matematici”. Sarebbe inutile avere librerie grafiche per un applicativo matematico e viceversa. Virtual Env, viene in nostro aiuto.
Per prima cosa verifichiamo quale versione di python viene utilizzata di default (non è fondamentale, ma potrebbe essere utile). Lanciamo da terminale il comando:
python -V
In questa guida vedremo come lavorare inPython3.x, ma la procedura sarà identica per Python 2.x, fatta eccezione per le versioni richiesta.
Ora procediamo ad installare alcune librerie utili.
apt-get install python3-dev python3-setuptools
Note: Se la nostra versione di default è Python 2.x allora dovremmo specificare che le installazioni dovranno avvenire per la verione 3 (per questo scriviamo python3-[nome-libreria]). Al contrario se la versione di default sarà python 3.x allora basterà scrivere semplicemente python-[nome-libreria]
Ora installiamo PIP (Python Pacage Index)ed è uno strumento indispensabile, perchè ci permette di scaricare quasi tutti i pacchetti dal repository di cui si ha bisogno. Il comando per l’installazione di PIP è molto semplice:
apt-get install python3-pip
Terminata l’installazione provvederemo ad installare finalmente Virtualenv tramite il seguente comando:
pip3 install virtualenv
Ora procediamo con la creazione di due ambienti di sviluppo in virtualenv, il primo per la manipolazione delle immagini, il secondo per svolgere operazioni matematiche.
Note: personalmente credo una cartella in /home/Virtual/* dove creare i progetti e nella guida utilizzerò questo principio, ma sappiate che potrete installare la virtualenv anche all’interno di un progetto o in un altra directory… python è molto flessibile :-)
Ora creiamo una directory che conterrà le diverse virtual environment e spostiamoci al suo interno:
mkdir ~/VirtualEnv
cd ~/VirtualEnv
Ora lanciamo il comandi:
virtualenv image
virtualenv number
I nomi, image e number sono di pura fantasia, potrete utilizzare i nomi che più vi piacciono.
Per ogni comando lanciato vedremmo apparire alcune righe ad esemepio:
Running virtualenv with interpreter /usr/bin/python3.5
New python executable in /home/xxx/Virtual/img/bin/python3.5
Also creating executable in /home/xxx/Virtual/img/bin/python
Installing setuptools, pkg_resources, pip, wheel...done.
Queste righe non sono molto importanti, ma ci spiegano che la virtualenv è stata creata ed i percorsi utilizzati.
Ora capiremo come lavorare in virtualenv. Per prima cosa dovremmo entrare nell’ambiente di sviluppo. Utilizzeromo l’ambiente image. Da console scriviamo il seguente codice:
source ~/Virtual/image/bin/activate
all’interno della console dovrebbe apparire qualcosa di simile:
(image)user@user ~/Virtual $
Per uscire dalla virtualenv basterà digitare:
deactivate
Questo ci indica che siamo all’interno di dell’ambiente image. Ora vediamo come sfruttarlo.
Se il nostro applicativo dovrà gestire le immagini potrebbe servirci la libreria PILLOW, installiamola:
(image) user@user ~/Virtual $ pip3 install PILLOW
Note: Per poter installa la libreria PILLOW il sistema dovrà possedere la libreira libjpeg-dev altrimenti l’installazione restituirà un errore.
Al termine dell’installazione facciamo una prova. Da terminale digitiamo:
python3
>>> import pillow
Cosa accade? Nulla… questo perchè il modulo è stato installato correttamente e siamo pronti ad utilizzare la libreria.
Ora passiamo alla seconda virtualenv. “Scolleghiamoci” utilizzando il comando deactivate per collegarci alla seconda virtualenv:
source ~/Virtual/number/bin/activate
Ora installiamo la libreria numpy:
pip3 install numpy
Ora lanciamo questo comando
python3
>>> import numpy
>>> import pillow
Verrà restituito un errore (ImportError: No module named ‘pillow’), perchè la libreria Pillow è presente solo nella prima virtualenv. Questo in realtà accade anche all’interno dell’ambiente principale.
Se uscissimo dalla virtualenv (deactivate) e digitassimo
python3
>>> import pillow
Il sistema restituirebbe comunque errore, perchè abbiamo utilizzato un sistema “virtuale” per conservare le librerie.
Cosa succede se un progetto ha bisogno di molte librerie ed ho necessità di riprodurlo su di una nuova macchina?
PIP ci viene in soccorso… all’interno della virtualenv potremmo creare un file che ci indichi tutte le librerie installate e successivamente installarle con due semplici comandi.
Creare la lista delle librerie installate all’interno del progetto (nome_mio_progetto):
~$/nome_mio_progetto/ pip3 freeze > requirements.txt
Il file potrebbe contenere qualcosa di similare:
... bitstring==3.1.5 certifi==2017.7.27.1 chardet==3.0.4 dropbox==8.0.0 fdb==1.8 idna==2.6 matlab==0.1 Naked==0.1.31 netifaces==0.10.6 numpy==1.13.1 ...
Per poter utilizzare il file requirements basterà eseguire il comando all’interno di una virtualenv “pulita”:
pip3 install -r requirements.txt
Grazie ed alla prossima guida.