Impostare un ambiente virtuale non ha niente di emozionante. Ma proprio nulla.

Può sembrare un argomento banale, noioso.

Ma ti informo di una cosa.

La maggior parte dei neofiti della programmazione non imposta (o sbaglia nel farlo) un ambiente virtuale.

🚦
Questo è a mio avviso uno degli articoli più importanti che leggerai se sei un neofita del campo.

Questo porta con sé notevole svantaggi, come errori di compatibilità tra librerie, disorganizzazione tra librerie e progetti e errori di cui non si capisce la natura in maniera intelligibile.

Evitare questi problemi con le semplici operazioni qui descritte sarà molto di aiuto e ti permetterà di essere più produttivo.

🚦
Questo articolo ha l'obiettivo di- insegnarti come e perché impostare un ambiente di sviluppo sia essenziale per essere organizzati e programmare in serenità- insegnarti ad usare conda o Poetry per la gestione di ambienti e pacchetti

Iniziamo!

Cosa è un ambiente virtuale?

Un breve incipit se hai appena iniziato il tuo percorso nella data science e nella programmazione in Python.

Un ambiente virtuale è un ambiente di sviluppo che si comporta come contenitore del nostro attuale progetto.

Pur avendo la possibilità di installare qualsivoglia libreria a livello di sistema, avere un ambiente virtuale permette di installare tali librerie e pacchetti per progetti specifici.

Questo permette di avere un sistema ordinato e facilmente navigabile, senza rischi di incompatibilità o malfunzionamenti a livello globale.

Dedicare un ambiente virtuale ad un progetto è prassi usuale, e andrebbe sempre fatto per i motivi sopracitati.

Nel tempo si è instaurata la tradizione nell'ambito della data science e machine learning di usare Anaconda per la gestione degli ambienti virtuali.

Insieme a quest'ultimo mostrerò anche come funziona Poetry, un'altra libreria molto interessante che ha lo stesso obiettivo di Anaconda, ma con una attenzione alla definizione della struttura del codice e della gestione delle incompatibilità.

Gestione degli ambienti virtuali con Anaconda

In Python esistono diverse opzioni per la gestione degli ambienti virtuali. Una delle più famose è sicuramente Anaconda, che un software che aiuta (soprattutto i data scientist) a configurare e gestire in maniera efficiente i nostri ambienti di sviluppo.

In uno degli esempi utilizzerò Miniconda per configurare Python sul sistema. È un installer lightweight di conda, un sistema open source di gestione di ambienti di sviluppo orientato al data science e disponibile per Linux, OSX e Windows.

La scelta di optare per Miniconda e non per Anaconda è perché quest'ultimo porta con se numerosi pacchetti che secondo me che non useremo mai se non in sporadici casi e quindi avere una installazione di piccole dimensioni è più sensato.

Come installare Miniconda su OSX

Userò l'installer per Python 3.9. Al tempo di scrittura di questo articolo il file che scaricheremo dal sito ufficiale avrà un nome del genere: Miniconda3-py39_23.5.2-0-MacOSX-arm64.sh

Schermata di download di Miniconda

A seconda dell'architettura del nostro sistema possiamo scegliere tra la versione base e la versione per chipset M1 ARM.

Una volta scaricato il file, apriamo il terminale e scriviamo

$ cd Downloads

$ sh Miniconda3-py39_23.5.2-0-MacOSX-arm64.sh

e seguiamo le istruzioni su schermo. Possiamo controllare abbiamo installato correttamente il software se scriviamo conda nel nostro terminale.

A questo punto abbiamo installato Miniconda sul nostro sistema Mac OSX e siamo pronti a creare un ambiente virtuale.

Creare un ambiente virtuale per la data science con Anaconda o Miniconda

Una volta installato Anaconda o Miniconda e validato il loro corretto funzionamento usando il comando conda è possibile creare un nuovo ambiente di sviluppo così:

$ conda create -n [nome_del_mio_ambiente]

Questo comando creerà un ambiente di sviluppo virtuale chiamato nome_del_mio_ambiente nella directory di installazione. Per attivare l'ambiente virtuale basta eseguire il comando

$ conda activate [nome_del_mio_ambiente]

A questo punto abbiamo finito. Il nostro ambiente virtuale è pronto per lo sviluppo del nostro applicativo. Vediamo ora come installare o disinstallare librerie e pacchetti nel nostro ambiente virtuale appena attivato.

Come installare pacchetti e librerie nell'ambiente virtuale di Anaconda

Ora è il momento di aggiungere strumenti alla nostra cassetta degli attrezzi. Per aggiungere un pacchetto o libreria Python, basta usare il comando

$ conda / pip install nome_libreria

Come possiamo vedere è possibile usare il comando pip per installare pacchetti anche all'interno di conda. Infatti, se usiamo il comando

$ conda list / pip list

conda o pip, rispettivamente, ci mostreranno i pacchetti installati attraverso il loro comando.

Consiglio di usare il comando pip install rispetto a conda install perché alcuni pacchetti non sono disponibili nel repository di conda. I motivi possono essere diversi, ma usare pip non ha alcun svantaggio e permette di scaricare e installare pacchetti efficientemente.

Conda Cheat Sheet - ogni comando a portata

Condivido con voi il cheat sheet ufficiale messo a disposizione da Anaconda. Vi permetterà di risparmiare moltissimo tempo nelle vostre ricerche e di ottimizzare il lavoro.

Gestione degli ambienti virtuali con Poetry

Sto usando Poetry sempre di più perché permette di gestire le dipendenze in una maniera strutturata e soprattutto replicabile.

Poetry - Python dependency management and packaging made easy
Python dependency management and packaging made easy

Uno dei punti di forza di Poetry è il suo lockfile. È un file che viene generato da Poetry ogni volta che si aggiunge, cambia o rimuove una dipendenza dal progetto.

In pratica permette di replicare in maniera deterministica un ambiente virtuale e aggiornarlo senza introdurre problema di incompatibilità.

Se sei un neofita questa può non sembrare una grande feature, ma ti garantisco che lo è.

Tantissime librerie dipendono da particolari versioni di librerie cardine, come ad esempio Numpy.

Quando il Numpy di turno rilascia un nuovo aggiornamento, ecco che potrebbe nascere una incompatibilità che potrebbe rendere il nostro progetto problematico.

La soluzione è bloccare la versione della dipendenza ad una specifica versione, che è quella specificata durante l'installazione.

Poetry fa tutto questo per noi, e molto altro. Vediamo come iniziare con Poetry con degli esempi.

Come installare Poetry

Alla pagina della documentazione è possibile trovare diversi link da inserire in terminale in base al nostro sistema operativo.

Introduction | Documentation | Poetry - Python dependency management and packaging made easy
Introduction Poetry is a tool for dependency management and packaging in Python. It allows you to declare the libraries your project depends on and it will manage (install/update) them for you. Poetry offers a lockfile to ensure repeatable installs, and can build your project for distribution. Syste…

Usando OSX, è sufficiente lanciare il comando

curl -sSL https://install.python-poetry.org | python3 -

Questo installerà Poetry sul nostro sistema e per testarlo sarà sufficiente scrivere poetry in terminale.

🚦
Se il comando poetry non genera alcun risultato nel terminale, segui gli step presenti qui sotto la sezione "Add Poetry to your PATH"

Quando la risposta del terminale è visibile, siamo pronti a creare un ambiente virtuale con Poetry.

Creare un ambiente virtuale per la data science con Poetry

A differenza di Anaconda, Poetry è in grado di creare direttamente la cartella del nostro progetto e popolarla con dei file utili.

$ poetry new [nome progetto]

La bellezza di Poetry è visibile qui: creerà una struttura intellegibile e pronta all'uso per il progetto.

nome-del-mio-progetto

├── pyproject.toml
├── README.md
├── nome-del-mio-progetto
│   └── __init__.py
└── tests
    └── __init__.py

Spostiamoci nella cartella facendo

$ cd [nome progetto]

Ovviamente se la struttura proposta da Poetry non è gradita o vogliamo cambiarla, siamo liberi di farlo a patto che non tocchiamo i file pyproject.toml e poetry.lock. Quest'ultimo verrà creato non appena installeremo una qualsiasi dipendenza al progetto.

Come installare pacchetti e librerie nell'ambiente virtuale di Poetry

Per installare qualsiasi pacchetto al progetto basta lanciare il seguente comando quando siamo presenti all'interno della cartella oppure attivato l'ambiente virtuale con il comando poetry shell

$ poetry add pandas numpy

Questo comanda Poetry di installare le librerie di Pandas e Numpy, alla loro ultima versione disponibile, e di avvertirci qualora ci fossero problemi di compatibilità.

Ora se andiamo a guardare il file pyproject.toml vediamo come questo stia tenendo traccia delle dipendenze e delle loro versioni, e altri metadati.

💡
Il file pyproject.toml si comporta un po' come il file requirements.txt, ma è obbligatorio per il corretto funzionamento di Poetry

Poetry è veramente facile da usare - ho avuto un grande boost di produttività da quando ho iniziato ad usarlo, ed è la mia prima scelta oggi in termini di software di gestione dell'ambiente virtuale.

Poetry permette di fare questo e molto altro. Per andare oltre questa introduzione ti consiglio di leggere attentamente la documentazione presente sul sito.

Conclusioni

Con questo articolo hai imparato quali sono alcune delle soluzioni più comuni per la gestione di ambienti virtuali e dipendenze in Python per la data science, machine learning e progetti anche generali.

Hai imparato a

  • installare Anaconda e Poetry
  • creare ambienti virtuali e installare pacchetti

Ricorda: non sottovalutare dedicare il tuo tempo a imparare competenze gestionali per i tuoi progetti informatici.

Se eseguite bene, queste operazioni semplificano la vita e aumentano la produttività.

Alla prossima,

Andrea