Skip to content

Se segui questo blog saprai che da qualche mese sto studiando Python. Quest’anno di conseguenza scriverò qualche piccola guida per ricordarmi le nozioni che apprendo, ma questi contenuti saranno solo una breve parentesi nel mondo SEO, che continuerò a trattare con focus principale.

Un ambiente virtuale in Python è uno strumento che aiuta a mantenere separate le dipendenze richieste da diversi progetti creando per loro ambienti virtuali isolati. Questo è uno degli strumenti più importanti utilizzati dalla maggior parte degli sviluppatori Python.

Venv è una funzionalità incorporata in Python per creare ambienti virtuali, che consente di isolare le dipendenze e le configurazioni di un progetto da quelle degli altri progetti.

Cos’è Venv

In Python, gli ambienti virtuali sono una funzionalità importante per isolare le dipendenze e le configurazioni dei progetti. Un ambiente virtuale è una cartella che contiene una copia privata di Python e di tutti i pacchetti installati. Ciò significa che ogni progetto può avere la sua versione di Python e di pacchetti specifici, senza influire sugli altri progetti.

Per esempio, immagina di avere un progetto che utilizza la versione 3.7 di Python e il pacchetto “requests” versione 2.22.0. Se inizi a lavorare su un altro progetto che richiede la versione 3.8 di Python e il pacchetto “requests” versione 2.24.0, senza gli ambienti virtuali, potresti incontrare problemi di compatibilità o conflitti tra le versioni dei pacchetti. Con gli ambienti virtuali, invece, puoi creare un ambiente virtuale specifico per ogni progetto, assicurando che ogni progetto abbia le sue versioni di Python e pacchetti.

Un’altra grande utilità degli ambienti virtuali è quella di poter condividere facilmente un progetto con altri sviluppatori, senza dover preoccuparsi di eventuali problemi legati alle dipendenze. In pratica, si può creare un file di requisiti, che elenca tutte le dipendenze del progetto e le loro versioni, in modo che gli altri sviluppatori possono facilmente creare un ambiente virtuale esattamente come quello utilizzato per sviluppare il progetto.

In Python, esiste una funzionalità incorporata chiamata Venv, che permette di creare e gestire facilmente ambienti virtuali. Utilizzando Venv, è possibile creare un nuovo ambiente virtuale, attivarlo, disattivarlo, installare pacchetti e creare un file di requisiti.

In conclusione, gli ambienti virtuali sono una funzionalità molto utile in Python per isolare le dipendenze e le configurazioni dei progetti e per condividere facilmente i progetti con altri sviluppatori. Venv è uno strumento incorporato in Python per creare e gestire facilmente gli ambienti virtuali.

Perché abbiamo bisogno di un ambiente virtuale?

Le applicazioni sviluppate con Python useranno spesso pacchetti e moduli che non fanno parte della libreria standard. A volte le applicazioni necessitano di una versione specifica di una libreria, poiché l’applicazione potrebbe richiedere la correzione di un determinato bug o l’applicazione potrebbe essere scritta utilizzando una versione obsoleta dell’interfaccia della libreria.

Ciò significa che potrebbe non essere possibile per un’installazione Python soddisfare i requisiti di ogni applicazione. Se l’applicazione A richiede la versione 1.0 di un particolare modulo ma l’applicazione B richiede la versione 2.0, i requisiti sono in conflitto e l’installazione della versione 1.0 o 2.0 non consente l’esecuzione di un’applicazione.

La soluzione a questo problema è quella di creare un ambiente virtuale, un albero di directory autonomo che contiene un’installazione Python per una particolare versione di Python, oltre a una serie di pacchetti aggiuntivi.

Applicazioni diverse possono quindi utilizzare ambienti virtuali diversi. Per risolvere il precedente esempio di requisiti in conflitto, l’applicazione A può avere un proprio ambiente virtuale con la versione 1.0 installata mentre l’applicazione B ha un altro ambiente virtuale con la versione 2.0. Se l’applicazione B richiede l’aggiornamento di una libreria alla versione 3.0, ciò non influirà sull’ambiente dell’applicazione A.

Immagina uno scenario in cui stai lavorando a due progetti Python basati sul web e uno di essi utilizza un Django 1.9 e l’altro utilizza Django 1.10 e così via. In tali situazioni, l’ambiente virtuale può essere davvero utile per mantenere le dipendenze di entrambi i progetti.

Quando e dove utilizzare un ambiente virtuale?

Per impostazione predefinita, ogni progetto sul sistema utilizzerà le stesse directory per archiviare e recuperare i pacchetti del sito (librerie di terze parti).

Che importanza ha? Ora, nell’esempio sopra di due progetti, hai due versioni di Django. Questo è un vero problema per Python poiché non è in grado di distinguere tra le versioni nella directory “site-packages”. Quindi sia v1.9 che v1.10 risiederebbero nella stessa directory con lo stesso nome. È qui che entrano in gioco gli ambienti virtuali. Per risolvere questo problema, dobbiamo solo creare due ambienti virtuali separati per entrambi i progetti. Il bello di questo è che non ci sono limiti al numero di ambienti che puoi avere poiché sono solo directory che contengono alcuni script.

L’ambiente virtuale dovrebbe essere usato ogni volta che lavori su qualsiasi progetto basato su Python. È generalmente buono avere un nuovo ambiente virtuale per ogni progetto basato su Python su cui lavori. Quindi le dipendenze di ogni progetto sono isolate dal sistema e dall’altra.

Come si creano ambienti virtuali?

Usiamo un modulo chiamato venv che è uno strumento per creare ambienti Python isolati. Venv crea una cartella che contiene tutti gli eseguibili necessari per usare i pacchetti di cui un progetto Python avrebbe bisogno.

Per creare un nuovo ambiente virtuale in Python utilizzando Venv, è possibile utilizzare la linea di comando o l’IDE di sviluppo.

Utilizzando la linea di comando, è possibile creare un nuovo ambiente virtuale utilizzando il comando “python -m venv [nome dell’ambiente]”. Ad esempio, per creare un nuovo ambiente virtuale chiamato “myenv”, si può utilizzare il comando “python -m venv myenv”.

Se si utilizza un IDE di sviluppo come PyCharm, è possibile creare un nuovo ambiente virtuale attraverso la sezione “Settings” o “Preferences” (a seconda della piattaforma) e selezionando “Project: [nome del progetto] > Project Interpreter” e infine premere sul pulsante “+”.

Una volta creato l’ambiente virtuale, è possibile accedere alla cartella dell’ambiente virtuale che contiene la copia privata di Python e tutti i pacchetti installati.

È importante notare che la cartella dell’ambiente virtuale creata può essere posizionata ovunque sul sistema, per cui è bene crearla in una posizione facilmente accessibile e ben organizzata.

In sintesi, per creare un nuovo ambiente virtuale in Python utilizzando Venv, si può utilizzare la linea di comando o l’IDE di sviluppo, utilizzando il comando “python -m venv [nome dell’ambiente]” o seguendo la procedura descritta nell’IDE di sviluppo utilizzato.

Come gestire un ambiente virtuale

Il modulo utilizzato per creare e gestire ambienti virtuali si chiama venv.

venv di solito installa la versione più recente di Python che hai a disposizione. Se hai più versioni di Python sul tuo sistema, puoi selezionare una versione specifica di Python eseguendo python3 o qualunque versione desideri.

Per creare un ambiente virtuale con venv, entra nella cartella che lo deve contenere e digita:

python3 -m venv env1

Il comando appena visto crea un virtual environment denominato “env1” che contiene una struttura di file e cartelle simile a questa:

├── bin
│   ├── activate
│   ├── activate.csh
│   ├── activate.fish
│   ├── easy_install
│   ├── easy_install-3.5
│   ├── pip
│   ├── pip3
│   ├── pip3.5
│   ├── python -> python3.5
│   ├── python3 -> python3.5
│   └── python3.5 -> /Library/Frameworks/Python.framework/Versions/3.5/bin/python3.5
├── include
├── lib
│   └── python3.5
│       └── site-packages
└── pyvenv.cfg

Ecco cosa contiene ogni cartella:

  • bin: file che interagiscono con l’ambiente virtuale
  • include: intestazioni C che compilano i pacchetti Python
  • lib: una copia della versione di Python insieme a una cartella dei pacchetti del sito in cui è installata ciascuna dipendenza

Dopo averlo creato devi attivare l’ambiente virtuale:

source env/bin/activate

Mentre per disattivarlo digita:

deactivate

Per visualizzare l’ambiente virtuale attivo digita:

which python

Per visualizzare tutti i pacchetti installati ed esportare un file elenco, naviga nella cartella del virtual env e digita (se vuoi vedere pacchetti venv attiva venv):

pip3 freeze > requirements.txt

Per copiare un ambiente virtuale venv sposta il file requirements.txt nella nuova cartella e digita:

pip3 install -r requirements.txt.

Per rimuovere completamente un virtual environment digita:

rm -r venv/

Una volta creato un ambiente virtuale in Python utilizzando Venv, è possibile attivarlo e disattivarlo in base alle esigenze del progetto in lavorazione.

Per attivare un ambiente virtuale in Windows, è necessario aprire una finestra del prompt dei comandi e utilizzare il comando “myenv\Scripts\activate.bat” (sostituendo “myenv” con il nome dell’ambiente virtuale creato). Una volta attivato l’ambiente virtuale, il nome dell’ambiente virtuale apparirà nella riga di comando, indicando che si sta lavorando all’interno dell’ambiente virtuale.

Per attivare un ambiente virtuale in Linux e MacOS, è necessario aprire una finestra del terminale e utilizzare il comando “source myenv/bin/activate” (sostituendo “myenv” con il nome dell’ambiente virtuale creato). Anche in questo caso, una volta attivato l’ambiente virtuale, il nome dell’ambiente virtuale apparirà nella riga di comando, indicando che si sta lavorando all’interno dell’ambiente virtuale.

Per disattivare un ambiente virtuale è sufficiente utilizzare il comando deactivate in qualsiasi sistema operativo.

Per fare un esempio pratico, supponiamo di avere un progetto chiamato “progetto1” e di aver creato un ambiente virtuale chiamato “env1” all’interno della cartella del progetto, per attivare l’ambiente virtuale si può utilizzare il comando source progetto1/env1/bin/activate su Linux o MacOS e progetto1\env1\Scripts\activate.bat su Windows.

Quindi, per attivare o disattivare un ambiente virtuale creato con Venv, è possibile utilizzare i comandi activate e deactivate rispettivamente, in base al sistema operativo utilizzato.

Installare pacchetti con pip

Una volta attivato un ambiente virtuale in Python utilizzando Venv, è possibile installare i pacchetti necessari per il progetto in lavorazione utilizzando il comando pip.

Pip è un gestore di pacchetti per Python che consente di installare, aggiornare e rimuovere pacchetti. Quando si utilizza pip all’interno di un ambiente virtuale, i pacchetti vengono installati solo all’interno di quell’ambiente virtuale e non influiscono sull’installazione globale di Python.

Per installare un pacchetto, è sufficiente utilizzare il comando pip install [nome del pacchetto]. Ad esempio, per installare il pacchetto NumPy, si può utilizzare il comando pip install numpy.

Per verificare i pacchetti installati all’interno dell’ambiente virtuale, si può utilizzare il comando pip freeze. Questo comando elenca tutti i pacchetti installati e le loro versioni.

Per disinstallare un pacchetto, è possibile utilizzare il comando pip uninstall [nome del pacchetto]. Ad esempio, per disinstallare NumPy, si può utilizzare il comando pip uninstall numpy.

In alcuni casi, potrebbe essere necessario installare una versione specifica di un pacchetto. Per fare ciò, si può utilizzare il comando pip install [nome del pacchetto==versione]. Ad esempio, per installare la versione 1.4 di NumPy, si può utilizzare il comando pip install numpy==1.4.

In sintesi, per installare, aggiornare o disinstallare pacchetti all’interno di un ambiente virtuale creato con Venv, è possibile utilizzare il gestore di pacchetti pip, utilizzando i comandi pip install, pip freeze e pip uninstall rispettivamente.

Come creare il file requirements.txt

Una volta completato un progetto in Python utilizzando un ambiente virtuale creato con Venv, è possibile creare un file requirements.txt che elenca tutti i pacchetti necessari per eseguire il progetto.

Il file requirements.txt può essere generato utilizzando il comando pip freeze mentre si è all’interno dell’ambiente virtuale. Questo comando elenca tutti i pacchetti installati e le loro versioni e scrive l’elenco in un file chiamato requirements.txt nella cartella corrente.

Per esempio, si può eseguire il comando pip freeze > requirements.txt per generare il file requirements.txt.

In questo modo, quando si vuole eseguire il progetto su un’altra macchina o condividere il progetto con qualcun altro, è sufficiente utilizzare il comando pip install -r requirements.txt per installare tutti i pacchetti necessari per eseguire il progetto.

In sintesi, per creare un file requirements.txt che elenca tutti i pacchetti necessari per eseguire un progetto in Python utilizzando un ambiente virtuale creato con Venv, è possibile utilizzare il comando pip freeze > requirements.txt mentre si è all’interno dell’ambiente virtuale e successivamente utilizzare il comando pip install -r requirements.txt per installare tutti i pacchetti necessari su un’altra macchina o per condividere il progetto con qualcun altro.

Non esiste solo VENV

Python 3.3 include nella sua libreria standard il nuovo pacchetto venv. Cosa fa e in cosa differisce da tutti gli altri pacchetti per la gestione degli ambienti virtuali? Vediamo le principali differenze.

Pacchetti PyPI non presenti nella libreria standard

  • virtualenv è uno strumento molto popolare che crea ambienti Python isolati per le librerie Python. Se non hai familiarità con questo strumento, ti consiglio vivamente di impararlo, in quanto è uno strumento molto utile e farò un confronto con esso per il resto di questa risposta. Funziona installando un gruppo di file in una directory (ad esempio: env/), e quindi modificando la variabile di ambiente PATH per aggiungerla al prefisso con una directory bin personalizzata (ad esempio: env/bin/). Una copia esatta del binario python o python3 è collocata in questa directory, ma Python è programmato per cercare prima le librerie relative al suo percorso, nella directory environment. Non fa parte della libreria standard di Python, ma è ufficialmente accettato dal PyPA (Python Packaging Authority). Una volta attivato, è possibile installare i pacchetti nell’ambiente virtuale usando pip.
  • pyenv è usato per isolare le versioni di Python. Ad esempio, potresti voler testare il tuo codice con Python 2.6, 2.7, 3.3, 3.4 e 3.5, quindi avrai bisogno di un modo per passare da un ambiente all’altro. Una volta attivato, prefigura la variabile d’ambiente PATH con ~/.pyenv/shims, dove ci sono file speciali corrispondenti ai comandi Python (python, pip). Queste non sono copie dei comandi forniti da Python; sono script speciali che decidono al volo quale versione di Python eseguire in base alla variabile di ambiente PYENV_VERSION, al file .python-version o al file ~/.pyenv/version. pyenv inoltre semplifica il processo di download e installazione di più versioni di Python, utilizzando il comando pyenv install.
  • pyenv-virtualenv è un plugin per pyenv dello stesso autore di pyenv, per permetterti di usare comodamente pyenv e virtualenv allo stesso tempo. Tuttavia, se si utilizza Python 3.3 o versioni successive, pyenv-virtualenv tenterà di eseguire python -m venv se disponibile, anziché virtualenv.
  • virtualenvwrapper è un insieme di estensioni di virtualenv. Ti dà comandi come mkvirtualenv, lssitepackages, risulta utile per passare da una directory virtuale all’altra.
  • pyenv-virtualenvwrapper è un plugin per pyenv dello stesso autore di pyenv, per integrare comodamente virtualenvwrapper in pyenv.
  • pipenv, di Kenneth Reitz, è il progetto più recente in questo elenco. Mira a combinare Pipfile, pip e virtualenv in un comando unico. La directory virtualenv viene in genere collocata in ~/.local/share/virtualenvs/XXX, con XXX come hash del percorso della directory del progetto. Questo aspetto differisce da virtualenv, in cui la directory si trova in genere nella directory di lavoro corrente.

La Guida al packaging di Python raccomanda pipenv durante lo sviluppo di applicazioni Python (al contrario delle librerie). Non sembra esserci alcun piano per supportare venv invece di virtualenv. Un aspetto che crea confusione è che la sua opzione da riga di comando –venv si riferisce alla directory virtualenv, non a venv, e allo stesso modo, la variabile d’ambiente PIPENV_VENV_IN_PROJECT influenza la posizione della directory virtualenv, non la directory venv.

Biblioteca standard

  • pyvenv è uno script fornito con Python 3 ma deprecato in Python 3.6 poiché aveva problemi. In Python 3.6+, l’equivalente esatto è python3 -m venv.
  • venv è un pacchetto fornito con Python 3, che puoi eseguire usando python3 -m venv (anche se per qualche ragione alcune distro lo separano in un pacchetto separato, come python3-venv su Ubuntu e Debian). Ha uno scopo simile a virtualenv e funziona bene o male nello stesso modo, ma non ha bisogno di copiare i binari di Python (tranne che su Windows). Usalo se non hai bisogno di supportare Python 2. Al momento in cui scrivo, la community di Python sembra essere felice con virtualenv e non ho sentito molto parlare di venv.

La maggior parte di questi strumenti si completano a vicenda. Ad esempio, pipenv integra pip, virtualenv e persino pyenv, se lo si desidera. Gli unici strumenti che sono vere alternative tra loro qui sono venv e virtualenv.

Raccomandazione per i principianti

Questa è la mia raccomandazione personale per i principianti: inizia imparando venv o virtualenv e pip, strumenti che funzionano con Python 2 e 3 e in una varietà di situazioni, e passa agli altri strumenti quando inizi a averne bisogno.

Articoli correlati

Autore

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Ultimi articoli aggiornati

Richiedi un preventivo SEO e Google Ads

Porta il tuo sito web al livello successivo con l’esperienza di EVE Milano. La nostra agenzia di Search Marketing ha ricevuto oltre 1150 richieste di preventivo, un segnale chiaro della fiducia che imprenditori e manager, come te, ripongono nella nostra specializzazione tecnica e verticale nella SEO e PPC. Se la tua organizzazione cerca competenze specifiche per emergere nei risultati di Google, noi siamo pronti a fornire quel valore aggiunto. Richiedi un preventivo ora e scopri la differenza tra noi e gli altri.
Richiedi un preventivo

Vuoi ricevere un avviso al mese con le nuove guide pubblicate?

Iscriviti alla newsletter!

Informativa sui cookies

Noi e terze parti selezionate utilizziamo cookie o tecnologie simili per finalità tecniche e, con il tuo consenso, anche per le finalità di esperienza e misurazione come specificato nella cookie policy. Puoi liberamente prestare, rifiutare o revocare il tuo consenso, in qualsiasi momento, accedendo al pannello delle preferenze. Il rifiuto del consenso può rendere non disponibili le relative funzioni. Usa il pulsante “Accetta” per acconsentire. Usa il pulsante “Rifiuta” per continuare senza accettare.