Ambienti virtuali in Python 3

Ambienti virtuali in Python 3
Come la maggior parte delle persone, odio installare pacchetti non necessari sulla mia workstation. Dopo aver finito con loro, disinstallarli non è mai abbastanza. I pacchetti lasciano alle spalle tonnellate di cartelle e file. Richiedono molti altri pacchetti (oscuri) lasciati anche dietro sulla scia delle cose. Lentamente ma sicuramente queste cose si accumulano nella tua workstation e sebbene non possano fare alcuna parte significativa del tuo spazio su disco, possono causare altri problemi.

Dipendenze più vecchie

I pacchetti più vecchi possono persistere e il tuo codice Python li userà felicemente. Questo non è un problema se i tuoi script Python hanno lo scopo di funzionare a livello locale e non per scopi industriali. I data scientist, gli studenti e persino le persone normali che automatizzano il loro compito quotidiano possono semplicemente continuare a utilizzare i pacchetti più vecchi senza un problema.

Il problema inizia quando spedi il codice in produzione. Quando lo fai, è probabile che invierai il tuo script principale e non tutte le dipendenze del pacchetto. Ad esempio, se hai scritto un microservizio per essere spedito come funzione AWS Lambda, le prime righe potrebbero importare un modulo di richiesta come questo:

Richiesta di importazione

Il pacchetto di richiesta fornito da AWS Lambda sarà diverso da quello più vecchio e, di conseguenza, il programma potrebbe arrestare il crash.

Conflitti

I conflitti potrebbero anche entrare nell'immagine in cui diversi progetti utilizzano versioni diverse dello stesso pacchetto. Forse alcuni dei tuoi progetti più vecchi hanno bisogno dei pacchetti PIP più vecchi. Ma potresti aver bisogno del pacchetto più recente per altri progetti. L'esecuzione di PIP Installa -u aggiornerà il pacchetto attraverso il sistema operativo causando problemi quando torni a mantenere i tuoi progetti più vecchi.

Python Ambiente virtuali

Se stai usando qualsiasi versione di Python sopra 3.5, è possibile utilizzare un modulo integrato chiamato VENV per creare quelli che vengono chiamati ambienti virtuali di Python. Quello che fa questo modulo è creare una cartella o una directory isolata in cui tutti i pacchetti PIP e altre dipendenze possono vivere. La cartella contiene anche uno script "attiva". Ogni volta che si desidera utilizzare un particolare ambiente virtuale, esegui semplicemente questo script, dopodiché è possibile accedere solo ai pacchetti contenuti in questa cartella. Se si esegue l'installazione di PIP, i pacchetti verranno installati all'interno di questa cartella e da nessuna parte. Dopo aver finito di utilizzare un ambiente, puoi semplicemente "disattivare" e quindi solo i pacchetti Global PIP saranno disponibili per te.

Se stai usando Ubuntu 18.04 e oltre, non è nemmeno necessario installare il gestore dei pacchetti PIP attraverso l'intero sistema. PIP può esistere all'interno del tuo ambiente virtuale solo se lo preferisci in questo modo.

Installazione di VENV e creazione di ambienti virtuali

Ubuntu 18.04 LTS esce dalla scatola con Python 3.6.X, ma il modulo Python Venv non è installato, né PIP. Installamoci solo venv.

$ APT Installa Python3-Venv

Successivamente, andiamo alla directory all'interno della quale si desidera creare la tua directory di ambiente virtuale. Per me è ~/Project1

$ CD ~/Project1

Crea il tuo VENV con il seguente comando, nota che il My-ENV è solo il nome di quell'ambiente, puoi nominarlo come vuoi:

$ python3 -m venv my -env

Nota: alcune installazioni Python3, come quelle disponibili su Windows, si chiama l'interprete di Python usando solo Python e non Python3, ma questo cambia da sistema a sistema. Per motivi di coerenza userò solo Python3.

Dopo che il comando ha terminato l'esecuzione, noterai una nuova cartella ~/Project1/my-evn. Per attivare l'ambiente virtuale MY-ENV, dovrai:

  1. Correre,
    $ Source ~/Project1/my-env/bin/attiva Se stai usando Bash.
    Ci sono script alternativi chiamati attiva.pescare e attivare.CSH per le persone che usano pesci e conchiglie CSH, rispettivamente.
  2. Su Windows, lo script può essere invocato eseguendo:
    >.\ my-env \ scripts \ attiva.pipistrello Se si utilizza il prompt dei comandi, o,
    >.\ my-env \ scripts \ attiva.PS1 Se stai usando PowerShell.

Utilizzando ambienti virtuali

Una volta eseguito correttamente lo script, noterai che il prompt cambia in qualcosa di simile a quello che viene mostrato di seguito, ora puoi installare pacchetti usando PIP:

(My-env) $ PIP3 Installa richieste
## Possiamo elencare i pacchetti installati utilizzando il comando 'PIP Freeze'
(my-env) $ pip3 Freeze
Certifi == 2018.10.15
Chardet == 3.0.4
IDNA == 2.7
PKG-Resources == 0.0.0
Richieste == 2.20.1
Urllib3 == 1.24.1

Finché l'ambiente virtuale è attivo (come indicato dal prompt), tutti i pacchetti verranno salvati solo nella directory dell'ambiente virtuale (MY-ENV), indipendentemente da dove ti trovi nel file system.

Per uscire dall'ambiente virtuale, è possibile digitare la disattivazione nel prompt e tornerai a utilizzare l'installazione a livello di sistema di Python. Puoi notare che i nuovi pacchetti che abbiamo appena installato non verranno mostrati nell'installazione di PIP globale.

Per sbarazzarsi dell'ambiente virtuale, elimina semplicemente la cartella My-ENV creata dopo aver eseguito il modulo. Puoi creare tutti questi ambienti che vuoi.

Conclusione

Con il modulo VENV, gli ambienti virtuali sono ora disponibili come caratteristica standard di Python, soprattutto se si installa da Python.org. In precedenza, avevamo molte implementazioni di terze parti chiamate Virtualenv, Pyenv, ecc.

Ciò ha dato origine a un software sempre più gonfio come Anaconda, specialmente popolare tra i data scientist. È bene avere finalmente uno strumento semplicistico per la gestione dei pacchetti Python senza dover installare molte altre spazzatura non correlate. Puoi leggere di più su Venv qui.