Aller au contenu

Apprendre Conda 🐍 | CrĂ©ez des environnements Python isolĂ©s

Mise Ă  jour :

Logo Conda, gestionnaire d'environnements et de paquets
multiplateforme

Vous ĂȘtes-vous dĂ©jĂ  retrouvĂ© dans cette situation : votre code fonctionne parfaitement sur votre machine, mais refuse obstinĂ©ment de s’exĂ©cuter ailleurs ? Les fameux conflits de versions, les dĂ©pendances incompatibles et les configurations impossibles Ă  reproduire sont le cauchemar de tout dĂ©veloppeur. Conda rĂ©sout ces problĂšmes en offrant un gestionnaire de paquets et d’environnements multiplateforme qui garantit la reproductibilitĂ© de vos configurations, quel que soit le systĂšme d’exploitation.

Qu’est-ce que Conda ?

Conda est donc un gestionnaire de paquets et un outil de gestion d’environnements virtuels. DĂ©veloppĂ© initialement pour la distribution Anaconda, il est aujourd’hui utilisĂ© bien au-delĂ  du monde Python. Son rĂŽle principal est de simplifier la gestion des dĂ©pendances et de garantir des environnements reproductibles sur diffĂ©rents systĂšmes d’exploitation.

En pratique, Conda vous permet de :

  • crĂ©er des environnements isolĂ©s pour chaque projet,
  • installer des paquets provenant de plusieurs canaux (channels),
  • rĂ©soudre automatiquement les conflits de versions,
  • exporter et partager vos environnements via un simple fichier YAML.

GrĂące Ă  cette approche, les administrateurs systĂšmes et les dĂ©veloppeurs Ă©vitent les “dependency hell” — ces conflits de versions qui rendent un projet instable ou impossible Ă  exĂ©cuter ailleurs.

Historique et philosophie de Conda

Conda a Ă©tĂ© créé par Continuum Analytics (aujourd’hui Anaconda Inc.) pour rĂ©pondre Ă  un besoin important : gĂ©rer des bibliothĂšques scientifiques complexes comme NumPy, SciPy ou Pandas, qui dĂ©pendent souvent de compilations natives.

Les outils classiques comme pip ou virtualenv, voir uv, ne suffisaient pas, car ils ne gĂšrent que les paquets Python. Conda, lui, traite tous types de dĂ©pendances, qu’elles soient Python, C/C++, R, ou autres.

Cette conception universelle fait de Conda un gestionnaire agnostique au langage, idĂ©al pour les environnements data science, DevOps ou CI/CD oĂč plusieurs langages et bibliothĂšques interagissent.

Conda vs autres gestionnaires de paquets

Contrairement Ă  pip, qui installe uniquement des modules Python Ă  partir de PyPI ↗, Conda tĂ©lĂ©charge des paquets prĂ©compilĂ©s depuis des canaux comme conda-forge ↗. Cela rĂ©duit considĂ©rablement les erreurs de compilation et accĂ©lĂšre l’installation.

FonctionnalitéCondapip + venv
GĂšre les paquets non PythonOuiNon
Crée des environnements isolésOuiOui
Résout les dépendances globalementOuiNon
Fichiers d’environnement reproductibles (.yml)OuiNon
Compatible multi-langagesOuiNon

Ainsi, Conda devient un outil de rĂ©fĂ©rence dĂšs qu’un projet implique plusieurs dĂ©pendances systĂšme ou doit ĂȘtre dĂ©ployĂ© sur des environnements variĂ©s.

Cas d’usage typiques

Conda est particuliÚrement adapté pour :

  • Projets data science : Jupyter, TensorFlow, PyTorch
  • Pipelines DevOps : environnements reproductibles en CI/CD
  • DĂ©veloppement multi-langage : Python, R, bibliothĂšques C/C++
  • Infrastructure Cloud et automatisation avec Ansible

Concepts importants de Conda

Avant de passer Ă  la pratique, il est essentiel de comprendre trois concepts fondamentaux qui constituent le cƓur de Conda : les environnements isolĂ©s, les canaux de distribution et la gestion automatique des dĂ©pendances.

Comprendre les environnements isolés

Un environnement Conda est un espace de travail isolé contenant ses propres paquets, dépendances et version de Python. Chaque projet peut ainsi fonctionner sans interférer avec les autres, ce qui évite les erreurs de compatibilité ou de mise à jour accidentelle.

Avantage clé : cette isolation garantit la reproductibilité des projets et facilite leur déploiement dans des chaßnes CI/CD.

Les canaux (channels)

Les canaux sont les sources Ă  partir desquelles Conda tĂ©lĂ©charge les paquets. Chaque canal contient des versions spĂ©cifiques de bibliothĂšques compilĂ©es pour diffĂ©rents systĂšmes d’exploitation et architectures.

Les canaux les plus utilisés :

CanalDescriptionLien
defaultsCanal officiel d’Anacondarepo.anaconda.com ↗
conda-forgeCommunautaire, trùs actif et completconda-forge.org ↗
biocondaSpĂ©cialisĂ© dans la bioinformatiquebioconda.github.io ↗

Gestion des dépendances

Lorsqu’un paquet est installĂ©, Conda rĂ©sout automatiquement les dĂ©pendances nĂ©cessaires. Il tĂ©lĂ©charge toutes les bibliothĂšques compatibles en fonction du systĂšme et de la version de Python.

Les différents outils : Conda, Mamba et Micromamba

Conda n’est pas le seul outil dans son Ă©cosystĂšme. Deux alternatives populaires, Mamba et Micromamba, offrent des performances amĂ©liorĂ©es tout en restant compatibles avec les environnements Conda.

Voici un tableau comparatif des trois outils :

CritĂšreCondaMambaMicromamba
Vitesse résolutionLente (SAT solver Python)10-100x plus rapideTrÚs rapide (C++)
Taille installation~500MB (Miniconda)~500MB + Conda~15MB (binaire autonome)
Cas d’usage principalDĂ©butants, compatibilitĂ©Remplacement directCI/CD, Docker
Environnement baseOui (requis)Oui (hérité de Conda)Non (optionnel)
Compatibilité100% référence100% avec Conda99% (quelques commandes diff.)
InstallationSimpleconda install mambaBinaire unique
Multi-OSOuiOuiOui
RecommandationFormationUsage quotidienProduction/CI

Le choix entre Conda, Mamba et Micromamba dépend de vos besoins spécifiques :

  • Conda est idĂ©al pour les dĂ©butants ou ceux qui privilĂ©gient la compatibilitĂ© maximale avec l’écosystĂšme existant.
  • Mamba convient parfaitement Ă  ceux qui recherchent une alternative performante, sans changer leurs habitudes.
  • Micromamba est parfait pour les environnements lĂ©gers, les pipelines CI/CD et les conteneurs Docker, oĂč la taille et la rapiditĂ© sont cruciales.

Dans le cadre de ce guide, nous utiliserons principalement Conda pour sa simplicité et son adoption généralisée. Cependant, les concepts et commandes présentés sont largement applicables à Mamba et Micromamba.

Installer Conda sur Linux, macOS et Windows

Voici comment installer et configurer Conda sur votre systĂšme.

Installation selon le systùme d’exploitation

Linux

TĂ©lĂ©chargez et exĂ©cutez le script d’installation depuis le site officiel :

Terminal window
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash Miniconda3-latest-Linux-x86_64.sh

Suivez les instructions, puis rechargez le shell :

Terminal window
source ~/.bashrc

VĂ©rifiez l’installation :

Terminal window
conda --version

macOS

TĂ©lĂ©chargez l’installateur depuis docs.conda.io ↗ puis exĂ©cutez :

Terminal window
bash Miniconda3-latest-MacOSX-x86_64.sh

Sur Apple Silicon (M1/M2/M3/M4), privilégiez Miniforge :

Terminal window
curl -L -O https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge3-MacOSX-arm64.sh
bash Miniforge3-MacOSX-arm64.sh

Windows

TĂ©lĂ©chargez l’exĂ©cutable .exe depuis conda.io ↗ et suivez l’assistant graphique. Ensuite, ouvrez Anaconda Prompt ou PowerShell et vĂ©rifiez :

Terminal window
conda --version

Configuration initiale

AprÚs installation, quelques réglages de base assurent une expérience fluide :

1. Mise Ă  jour de Conda

Terminal window
conda update conda

2. Configuration .condarc optimale

Le fichier .condarc configure le comportement global de Conda. PlutĂŽt que d’éditer manuellement .condarc, vous pouvez configurer Conda via ces commandes :

Terminal window
# Configuration recommandée par commandes
conda config --add channels conda-forge
conda config --set channel_priority strict
conda config --set show_channel_urls true
conda config --set auto_activate false

Vous pouvez vérifier la configuration finale avec :

Terminal window
# Vérifier que la configuration est bien appliquée
conda config --show channels
conda config --show channel_priority
conda config --show auto_activate

Maintenant que Conda installé et configuré, vous pouvez commencer à créer vos environnements isolés et à installer des paquets depuis différents canaux.

Premier projet avec Conda

À la fin du chapitre, vous aurez :

  • un environnement isolĂ© myapi-dev (zĂ©ro paquet dans base),
  • un fichier environment.yml versionnĂ© et appliquĂ©,
  • un micro-projet Python qui tourne et un test qui passe,
  • les commandes quotidiennes pour lister/mettre Ă  jour/nettoyer.

Voici l’arborescence du projet Ă  la fin des Ă©tapes :

myapi/
├─ src/
│ └─ app.py
├─ tests/
│ └─ test_app.py
├─ environment.yml
├─ .condarc
├─ .gitignore
└─ README.md

Étape 1 — Initialisation du projet

Commençons par créer la structure de base du projet et initialiser un dépÎt Git :

Terminal window
mkdir -p myapi/src myapi/tests && cd myapi
git init
printf "__pycache__/\n*.lock\n.conda/\n" > .gitignore

Ensuite, configurez Conda pour le projet :

Terminal window
# Configuration recommandée pour le projet
conda config --add channels conda-forge
conda config --set channel_priority strict
conda config --set show_channel_urls true

Étape 2 — CrĂ©ation de l’environnement

CrĂ©ons maintenant l’environnement myapi-dev avec les paquets nĂ©cessaires :

Terminal window
# Créer l'environnement avec tous les paquets nécessaires
conda create -n myapi-dev python=3.11 flask==3.1.1 uvicorn pytest requests -c conda-forge
# Activer l'environnement
conda activate myapi-dev

Pourquoi nommer l’environnement myapi-dev et non juste dev ? Pour Ă©viter les conflits avec d’autres projets sur la mĂȘme machine. En effet tous les environnements Conda sont stockĂ©s dans le mĂȘme rĂ©pertoire, donc des noms d’environnement uniques sont essentiels.

Étape 3 — Code minimal de l’API

Nous créons un fichier src/app.py avec une API Flask minimale :

Terminal window
cat > src/app.py <<'PY'
from flask import Flask, jsonify
app = Flask(__name__)
@app.get("/health")
def health():
return jsonify(status="ok")
if __name__ == "__main__":
# Lancement local
app.run(host="0.0.0.0", port=8000)
PY

Étape 4 — Test unitaire

Ajoutons un test unitaire simple dans tests/test_app.py :

Terminal window
# Créer un test simple directement avec echo
echo 'def test_smoke():
assert 1 + 1 == 2' > tests/test_app.py
# Exécuter les tests avec pytest
pytest

Étape 5 — Lancer l’app

On valide le bon fonctionnement de l’API en lançant l’application :

Terminal window
python src/app.py

Vous pouvez vĂ©rifier que l’API fonctionne en accĂ©dant Ă  http://localhost:8000/health. Vous devriez voir une rĂ©ponse JSON :

{"status":"ok"}

Mettre à jour les dépendances

Pour mettre à jour les dépendances de votre environnement vous avez deux options.

  • Si vous souhaitez mettre Ă  jour un paquet spĂ©cifique Ă  une version spĂ©cifique, utilisez la commande suivante :

    Terminal window
    conda install -n myapi-dev flask==3.1.1
  • Sinon, pour mettre Ă  jour la derniĂšre version disponible d’un paquet, utilisez :

    Terminal window
    conda update -n myapi-dev flask

Etape 6 — Supprimer un environnement

Nous sommes arrivés à la fin de notre mini-projet. Il est temps de nettoyer en supprimant les environnements devenus inutiles.

Terminal window
# Désactiver l'environnement s'il est actif
conda deactivate
# Lister les environnements restants pour vérifier
conda env list
# Supprimer complĂštement l'environnement
conda env remove -n myapi-test
# Ou supprimer plusieurs environnements d'un coup
conda env remove -n myapi-test -n myapi-prod

Conclusion

Conda est bien plus qu’un simple gestionnaire de paquets : c’est un outil d’infrastructure logicielle, pensĂ© pour la reproductibilitĂ©, la portabilitĂ© et la cohĂ©rence des environnements dans les chaĂźnes DevOps, Data Science et CI/CD.

Grùce à ce guide, vous disposez désormais de toutes les clés pour :

  • crĂ©er des environnements isolĂ©s,
  • gĂ©rer efficacement vos dĂ©pendances,
  • et garantir la reproductibilitĂ© de vos projets Ă  grande Ă©chelle.

Dans de futurs chapitres, nous explorerons des cas d’usage avancĂ©s, des intĂ©grations avec des outils de CI/CD comme GitHub Actions et GitLab CI, ainsi que des stratĂ©gies de dĂ©ploiement dans le cloud.

Plus d’infos

Pour approfondir vos connaissances sur Conda, il est essentiel de consulter les ressources officielles, réguliÚrement mises à jour :