Articolo originale: How to Set Up a Virtual Environment in Python – And Why It's Useful

Quando si sviluppano software con Python, un approccio di base è di installare Python sulla tua macchina, installare tutte le librerie richieste tramite terminale, scrivere tutto il codice in un singolo file .py o notebook ed eseguire il programma Python nel terminale.

Questo è un approccio comune per molti principianti e molte persone che stanno passando al lavorare con Python per l'analisi dei dati.

Questo va bene per semplici progetti di script Python. Ma nello sviluppo di progetti software complessi, come costruire una libreria Python, una API o un kit per lo sviluppo di software, spesso dovrai lavorare con più file, pacchetti e dipendenze. Di conseguenza è necessario isolare il tuo ambiente di sviluppo Python per quel particolare progetto.

Considera questo scenario: stai lavorando sull'app A, usando Python installato sul tuo sistema, poi aggiungi il pacchettoX versione 1.0 tramite pip nella tua libreria Python globale. Quindi passi al progetto B sulla tua macchina locale e installi lo stesso pacchettoX ma versione 2.0, che contiene alcuni cambiamenti non compatibili con la versione 1.0.

Quando torni a eseguire l'app A, otterrai tutti i tipi di errori possibili e la tua applicazione non verrà eseguita. Questo è una scenario nel quale puoi incappare quando scrivi dei software con Python, e per superare questo problema possiamo usare gli ambienti virtuali.

Questo tutorial tratta tutto quello che ti serve sapere sugli ambienti virtuali e come impostarne uno con Virtualenv.

Cos'è un Ambiente Virtuale?

La documentazione ufficiale di Python afferma:

"Un ambiente virtuale è un ambiente Python impostato in modo che l'interprete, le librerie e gli script in esso installati siano isolati da quelli installati in altri ambienti virtuali e (nella modalità predefinita) da qualunque libreria sia installata nel Python di "sistema", vale a dire quello installato come parte del tuo sistema operativo"

In altre parole, quando attivi un ambiente virtuale per il tuo progetto, il progetto diventa un'applicazione autonoma, indipendente dal  Python installato nel sistema e dai suoi moduli.

Il tuo nuovo ambiente virtuale ha il suo pip per installare librerie, la sua cartella di librerie, dove vengono aggiunte le librerie nuove, e il suo interprete Python per la versione di Python che hai usato per attivare l'ambiente.

Con questo nuovo ambiente, la tua applicazione diventa auto-contenuta e otterrai alcuni vantaggi come:

  • Il tuo ambiente di sviluppo è contenuto all'interno del progetto, diventa isolato e non interferisce con il Python installato nel sistema o con altri ambienti virtuali
  • Puoi creare un nuovo ambiente virtuale per più versioni di Python
  • Puoi scaricare pacchetti nel tuo progetto senza dover disporre di privilegi di amministratore
  • Puoi facilmente impacchettare la tua applicazione e condividerla con altri sviluppatori che la possono replicare
  • Puoi creare facilmente una lista di dipendenze e sotto dipendenze in un file per il tuo progetto, facilitando gli altri sviluppatori nel replicare e installare tutte le dipendenze usate all'interno dell'ambiente

L'utilizzo di ambienti virtuali è raccomandato per lo sviluppo di progetti software che in genere si espandono oltre il singolo script Python, e Python fornisce diversi modi per creare e utilizzare un ambiente virtuale.

Nelle sezioni che seguono, illustreremo come impostare un ambiente virtuale usando venv, che fornisce molto più controllo a basso livello sull'ambiente.

Un altro modo comune di impostare un ambiente virtuale è tramite l'uso di  pipenv, che ha un approccio a livello più alto.

Come Installare un Ambiente Virtuale Usando Venv

Virtualenv è uno strumento per impostare ambienti Python. Dalla versione di Python 3.3, un suo sottoinsieme è stato integrato nella libreria standard all'interno del modulo venv. Puoi installare venv sulla versione ospite di Python digitando il seguente comando nel terminale:

pip install virtualenv

Per usare venv in un progetto, sul terminale, crea una nuova cartella per il progetto e spostati su di essa, quindi esegui il seguente comando:

 python<versione> -m venv <nome-ambiente-virtuale>

In questo modo:

 mkdir projectA
 cd projectA
 python3.8 -m venv env

Quando controlli la cartella del nuovo progetto projectA, scoprirai che è stata creata una nuova cartella chiamata env. env è il nome del tuo ambiente virtuale, ma può essere rinominato a piacimento.

Se dai un'occhiata al contenuto di env, su Mac o con una distribuzione Linux vedrai una cartella bin. Vedrai anche degli script che sono tipicamente usati per controllare l'ambiente virtuale come activate e pip per installare librerie, e l'interprete Python per la versione che hai installato e così via (la cartella bin è chiamata Scripts in Windows).

La cartella lib contiene un elenco delle librerie installate. Se gli dai un'occhiata, vedrai una lista delle librerie installate nella modalità predefinita con l'ambiente virtuale.

Come Attivare l'Ambiente Virtuale

Ora che hai creato l'ambiente virtuale, dovrai attivarlo prima di poterlo usare nel tuo progetto. Su un Mac o con una distribuzione Linux esegui quanto segue:

source env/bin/activate

Questo attiverà l'ambiente virtuale. Noterai immediatamente che l'indicazione del percorso sul terminale include env, il che significa che un ambiente virtuale è attivato.

Nota che per attivare l'ambiente virtuale in Windows occorre eseguire i seguenti comandi (segui questo link per comprendere appieno le differenze tra le piattaforme):

 env/Scripts/activate.bat //In CMD
 env/Scripts/Activate.ps1 //In Powershell

L'Ambiente Virtuale sta funzionando?

Abbiamo attivato l'ambiente virtuale. Ma come possiamo confermare che il nostro progetto è effettivamente isolato dal Python del sistema operativo ospitante? Possiamo fare un paio di cose.

Innanzitutto controlliamo l'elenco di pacchetti installati nell'ambiente virtuale eseguendo il comando qui sotto nell'ambiente virtuale attivato. Noterai che ci sono solo due pacchetti – pip e setuptools, che sono i pacchetti base installati nella modalità predefinita con un nuovo ambiente virtuale

pip list

Successivamente puoi eseguire lo stesso comando qui sopra in un nuovo terminale nel quale non è attivo alcun ambiente virtuale. Noterai che ci sono molte più librerie nella versione di Python del sistema operativo che potresti avere installato in passato. Queste librerie non sono parte della versione di Python nell'ambiente virtuale fino a quando non le installi esplicitamente.

Come Installare Librerie in un Ambiente Virtuale

Per installare nuove librerie puoi semplicemente utilizzare pip. L'ambiente virtuale utilizzerà la sua propria versione di pip, quindi non devi usare pip3.

Dopo avere installato le librerie necessarie, puoi vedere tutte le librerie installate usando pip list, oppure puoi generare un elenco su file eseguendo il seguente comando:

pip freeze > requirements.txt

Puoi chiamare il file requirements.txt oppure con qualsiasi altro nome preferisci.

Il File di Requisiti

Perché è importante un file di requisiti per il tuo progetto? Considera che impacchetterai il progetto in un file zip (senza la cartella env) e lo condividerai con il tuo amico sviluppatore.

Per ricreare il tuo ambiente di sviluppo, il tuo amico dovrà semplicemente seguire i passi sopra indicati per attivare un nuovo ambiente virtuale.

Invece di dovere installare ciascuna dipendenza una alla volta, potrebbe eseguire il comando qui sotto per installare tutte le tue dipendenze nella sua copia del progetto:

 ~ pip install -r requirements.txt

Nota che in genere non è consigliabile condividere la propria cartella env e dovrebbe essere facilmente replicata in un qualsiasi nuovo ambiente.

Tipicamente la tua directory env sarà inclusa in un file .gitignore (quando si usa una piattaforma di controllo di versione come GitHub) per assicurarsi che il contenuto di quella cartella non sia trasferita nel repository del progetto.

Come Disattivare un Ambiente Virtuale

Per disattivare il tuo ambiente virtuale, esegui semplicemente il seguente comando nel terminale:

 ~ deactivate

Conclusione

Gli ambienti virtuali di Python ti forniscono la capacità di isolare lo sviluppo dei tuoi progetti Python dal Python installato nel sistema o da altri ambienti Python. Tutto ciò offre pieno controllo sul progetto e lo rende facilmente riproducibile.

Quando si sviluppano applicazioni che in genere necessitano di più di un semplice script .py o un notebook Jupyter, è una buona idea usare un ambiente virtuale – e ora sai come fare per impostarne uno e iniziare a usarlo.