Virtualenv e venv: spiegazione degli ambienti virtuali Python

Di tutti i motivi per cui Python è un successo tra gli sviluppatori, uno dei più grandi è la sua ampia e in continua espansione selezione di pacchetti di terze parti. Comodi toolkit per qualsiasi cosa, dall'inserimento e formattazione dei dati alla matematica ad alta velocità e all'apprendimento automatico, sono solo una importo pip installmeno.

Ma cosa succede quando quei pacchetti non funzionano bene l'uno con l'altro? Cosa fai quando diversi progetti Python necessitano di versioni concorrenti o incompatibili degli stessi componenti aggiuntivi? È qui che entrano in gioco gli ambienti virtuali Python.

Puoi creare e lavorare con ambienti virtuali sia in Python 2 che in Python 3, sebbene gli strumenti siano diversi. Virtualenv è lo strumento di scelta per Python 2, mentre venv gestisce l'attività in Python 3. 

Cosa sono gli ambienti virtuali Python?

Un ambiente virtuale è un modo per avere più istanze parallele dell'interprete Python, ciascuna con diversi set di pacchetti e diverse configurazioni. Ogni ambiente virtuale contiene una copia discreta dell'interprete Python, comprese le copie delle sue utilità di supporto.

I pacchetti installati in ogni ambiente virtuale vengono visualizzati solo in quell'ambiente virtuale e in nessun altro. Anche i pacchetti grandi e complessi con binari dipendenti dalla piattaforma possono essere separati l'uno dall'altro in ambienti virtuali.

Esistono alcuni casi d'uso comuni per un ambiente virtuale:

  1. Stai sviluppando più progetti che dipendono da diverse versioni degli stessi pacchetti oppure hai un progetto che deve essere isolato da determinati pacchetti a causa di una collisione dello spazio dei nomi. Questo è il caso d'uso più standard.
  2. Stai lavorando in un ambiente Python in cui non puoi modificare la directory dei pacchetti del sito. Ciò può essere dovuto al fatto che stai lavorando in un ambiente altamente controllato, come l'hosting gestito, o su un server in cui la scelta dell'interprete (o dei pacchetti utilizzati in esso) non può essere modificata a causa dei requisiti di produzione.
  3. Si desidera sperimentare una combinazione specifica di pacchetti in circostanze altamente controllate, ad esempio per testare la compatibilità incrociata o la compatibilità con le versioni precedenti.
  4. Si desidera eseguire una versione "di base" dell'interprete Python su un sistema senza pacchetti di terze parti e installare solo pacchetti di terze parti per ogni singolo progetto secondo necessità.

Niente dice che non puoi semplicemente decomprimere una libreria Python in una sottocartella di un progetto e usarla in questo modo. Allo stesso modo, puoi scaricare una copia standalone dell'interprete Python, decomprimerlo in una cartella e usarlo per eseguire script e pacchetti ad esso dedicati.

Ma la gestione di questi progetti messi insieme diventa presto difficile. All'inizio sembra solo più facile farlo. Lavorare con pacchetti che hanno componenti binari o che si basano su elaborate dipendenze di terze parti può essere un incubo. La migliore soluzione a lungo termine è utilizzare i meccanismi nativi di Python per creare e lavorare con ambienti virtuali.

Ambienti virtuali in Python 3

Virtualenv si è dimostrato indispensabile per innumerevoli sviluppatori Python, ma non fa parte della libreria standard di Python. Python 3 ha strumenti nativi per ambienti virtuali che rendono l'intero processo abbastanza semplice.

Video correlato: come Python semplifica la programmazione

Perfetto per l'IT, Python semplifica molti tipi di lavoro, dall'automazione del sistema al lavoro in campi all'avanguardia come l'apprendimento automatico.

Crea l'ambiente virtuale

Per creare un ambiente virtuale in una determinata directory, digita:

python3 -m venv /path/to/directory

(Nota che puoi semplicemente usare  pythoninvece di python3se il tuo sistema riconosce pythoncome interprete Python 3 predefinito.)

L'intero processo di configurazione dell'ambiente virtuale potrebbe richiedere uno o due minuti. Al termine, dovresti avere una directory con alcune sottodirectory al suo interno. La sottodirectory più importante è  binsu Unix o  Scriptssu Windows, che è dove troverai la copia dell'interprete Python per l'ambiente virtuale insieme alle sue utilità.

Si noti che poiché ogni ambiente virtuale contiene la propria copia dell'interprete Python, può essere abbastanza grande. Sia su Windows che su Linux, un ambiente virtuale Python 3.6 consumerà circa 23 MB di spazio su disco.

Attiva l'ambiente virtuale

Prima di poter utilizzare questo ambiente virtuale, è necessario attivarlo esplicitamente . L'attivazione rende l'ambiente virtuale l'interprete Python predefinito per la durata della sessione.

Dovrai utilizzare una sintassi diversa per attivare l'ambiente virtuale a seconda del sistema operativo e della shell dei comandi che stai utilizzando.

  • Su Unix o MacOS, utilizzando la shell bash: source /path/to/venv/bin/activate
  • Su Unix o MacOS, utilizzando la shell csh: source /path/to/venv/bin/activate.csh
  • Su Unix o MacOS, utilizzando il guscio di pesce: source /path/to/venv/bin/activate.fish
  • Su Windows utilizzando il prompt dei comandi:path\to\venv\Scripts\activate.bat
  • Su Windows utilizzando PowerShell: path\to\venv\Scripts\Activate.ps1

Nota che l'ambiente attivato funziona solo per il contesto in cui è stato attivato . Ad esempio, se avvii due istanze di PowerShell, A e B, e attivi solo l'ambiente virtuale nell'istanza A, quell'ambiente si applicherà solo ad A. Non si applicherebbe altrove.

Configura e utilizza l'ambiente virtuale

Dopo aver attivato il nuovo ambiente virtuale, puoi utilizzare il gestore pacchetti pip per aggiungere e modificare i pacchetti per esso. Troverai pip nella Scriptssottodirectory dell'ambiente virtuale su Windows e nella binsottodirectory sui sistemi operativi Unix.

Se hai già familiarità con il modo in cui funziona pip, sei pronto. Dovrebbe essere lo stesso in un ambiente virtuale. Assicurati solo di utilizzare l'istanza di pip che gestisce i pacchetti per l'ambiente virtuale nel contesto in cui è stato attivato, ad esempio la sessione bash o la sessione dell'interfaccia della riga di comando di Windows / PowerShell. Se vuoi verificare che stai usando il pip corretto e l'ambiente virtuale giusto, digita pip -Ve verifica che il percorso che mostra punti a una sottodirectory del tuo ambiente virtuale.

Per utilizzare l'ambiente virtuale creato per eseguire script Python, è sufficiente richiamare Python dalla riga di comando nel contesto in cui è stato attivato.

Disattivazione dell'ambiente virtuale

Quando hai finito di utilizzare l'ambiente virtuale, puoi semplicemente terminare la sessione in cui lo stavi utilizzando. Se vuoi continuare a lavorare nell'ambiente ma con l'interprete Python predefinito, digita deactivateal prompt. Gli utenti Windows nel prompt dei comandi devono essere eseguiti deactivate.batdalla Scriptssottodirectory, ma gli utenti Unix e gli utenti Windows che eseguono PowerShell possono semplicemente digitare deactivatein qualsiasi directory.

Rimozione dell'ambiente virtuale

Gli ambienti virtuali sono autonomi. Quando non hai più bisogno dell'ambiente virtuale, puoi semplicemente eliminare la sua directory.

Ambienti virtuali in Python 2

Con Python 2, gli ambienti virtuali non sono una caratteristica nativa del linguaggio. Invece, è necessario installare librerie di terze parti per creare e gestire ambienti virtuali.

Il più popolare e ampiamente utilizzato di questi progetti è virtualenv, che gestisce la creazione della struttura delle directory e la copia dei file necessari in un ambiente virtuale. Per installare virtualenv, usa semplicemente pip install virtualenv. Per creare una directory dell'ambiente virtuale con esso, digita virtualenv /path/to/directory. L'attivazione e la disattivazione dell'ambiente virtuale funziona allo stesso modo degli ambienti virtuali in Python 3 (vedi sopra).

Utilizzo di ambienti virtuali con notebook Jupyter

Se stai utilizzando notebook Jupyter (noti anche come notebook IPython) e hai già installato Jupyter a livello di sistema, crea il tuo ambiente virtuale e attivalo. Quindi, dalla directory del tuo ambiente virtuale, esegui pip install ipykernelper aggiungere i componenti necessari per IPython. Infine, esegui ipython kernel install —user —name=, dove nome_progetto è un nome che desideri associare a quel particolare progetto. Da lì dovresti essere in grado di avviare Jupyter e passare al kernel IPython che hai installato all'interno dell'ambiente virtuale.