Aller au contenu
MLOps medium

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

14 min de lecture

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.

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.

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.

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.

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

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.

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 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

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.

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.

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

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

FenĂȘtre de terminal
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 :

FenĂȘtre de terminal
source ~/.bashrc

VĂ©rifiez l’installation :

FenĂȘtre de terminal
conda --version

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

FenĂȘtre de terminal
bash Miniconda3-latest-MacOSX-x86_64.sh

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

FenĂȘtre de terminal
curl -L -O https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge3-MacOSX-arm64.sh
bash Miniforge3-MacOSX-arm64.sh

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

FenĂȘtre de terminal
conda --version

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

FenĂȘtre de terminal
conda update conda

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

FenĂȘtre de terminal
# 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 :

FenĂȘtre de terminal
# 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.

À 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

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

FenĂȘtre de terminal
mkdir -p myapi/src myapi/tests && cd myapi
git init
printf "__pycache__/\n*.lock\n.conda/\n" > .gitignore

Ensuite, configurez Conda pour le projet :

FenĂȘtre de terminal
# 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

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

FenĂȘtre de terminal
# 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.

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

FenĂȘtre de terminal
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

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

FenĂȘtre de terminal
# 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

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

FenĂȘtre de terminal
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"}

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 :

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

    FenĂȘtre de terminal
    conda update -n myapi-dev flask

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

FenĂȘtre de terminal
# 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

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.

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

  • Documentation officielle de Conda — Guide complet sur l’installation, la gestion d’environnements, la configuration des canaux et les commandes avancĂ©es.
  • Anaconda.org — Plateforme d’hĂ©bergement et de partage de paquets Conda.
  • GitHub Conda — code source, issues, et discussions autour du cƓur du projet.