# Conda (gestore pacchetti)

Conda è un gestore di pacchetti e di ambienti virtuali open source, multipiattaforma e indipendente dal linguaggio. Originariamente sviluppato per affrontare le sfide della gestione dei pacchetti (installazione, aggiornamento e risoluzione delle dipendenze) da parte dei data scientist che utilizzano Python, oggi è un popolare gestore di pacchetti per Python e R.
Creato nel 2012 da Continuum Analytics (ora Anaconda Inc.), Conda era parte della distribuzione Anaconda, ma è stato successivamente rilasciato come pacchetto separato sotto la licenza BSD.
È incluso in tutte le versioni di Anaconda, Miniconda, e Anaconda Repository. Conda è un progetto affiliato a NumFOCUS.

## Caratteristiche

Conda, come gestore di pacchetti, gestisce l'installazione di pacchetti precompilati (binari) e delle relative dipendenze prelevando quelli ottimizzati per la specifica piattaforma (Linux, Windows e macOS) da specifici repository.
Quando si richiede l'installazione di un pacchetto o un aggiornamento, Conda utilizza un algoritmo di risoluzione delle dipendenze che analizza i pacchetti attualmente installati, eventuali limitazioni di versione imposte dall'utente (ad esempio, l'utente desidera che un pacchetto specifico sia almeno della versione 2.1.3) e cerca di trovare una combinazione di versioni dei pacchetti che soddisfi tutti i requisiti senza conflitti. Confronta le versioni dei pacchetti e le loro dipendenze per garantire che le versioni installate siano compatibili. Se esistono conflitti tra le dipendenze, Conda segnala l'errore all'utente e propone alternative possibili.
Conda consente agli utenti di creare delle specie di sandbox isolate all'interno del sistema, dove è possibile installare e gestire specifiche versioni di Python e dei suoi pacchetti senza interferire con altri progetti o ambienti. Queste sandbox in Conda prendono il nome di ambienti.
Ogni ambiente consente all'utente di creare diversi set di pacchetti software per ogni progetto su cui stanno lavorando. Gli ambienti Conda sono essenziali per gestire progetti Python con requisiti diversi, garantendo la flessibilità, l'organizzazione e la riproducibilità del proprio lavoro.
Ad esempio, supponiamo di avere due progetti con le seguenti caratteristiche:
* Progetto A: Richiede Python 3.7 e le librerie TensorFlow 1.15 e Keras 2.3.1.
* Progetto B: Richiede Python 3.9 e le librerie PyTorch 1.10 e scikit-learn 1.0.
È possibile creare due ambienti, uno per il Progetto A e uno per il Progetto B.
* Ambiente A: Con Python 3.7, TensorFlow 1.15 e Keras 2.3.1.
* Ambiente B: Con Python 3.9, PyTorch 1.10 e scikit-learn 1.0.
In questo modo è possibile passare da un progetto all'altro semplicemente attivando l'ambiente corrispondente e senza preoccuparsi di conflitti tra le versioni delle librerie.
Per facilitare ulteriormente l'installazione di tali ambienti, Conda può anche installare Python, l'interprete per i pacchetti software stessi.
Conda è scritto in Python, ma può gestire progetti contenenti codice scritto in qualsiasi linguaggio, compresi progetti multilinguaggio.
Un canale Conda popolare per il software di bioinformatica è Bioconda, che fornisce molteplici distribuzioni di software per la biologia computazionale.