Conda : gestion d'env. & paquets Python
Mise à jour :
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é | Conda | pip + venv |
---|---|---|
Gère les paquets non Python | Oui | Non |
Crée des environnements isolés | Oui | Oui |
Résout les dépendances globalement | Oui | Non |
Fichiers d’environnement reproductibles (.yml ) | Oui | Non |
Compatible multi-langages | Oui | Non |
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 :
Canal | Description | Lien |
---|---|---|
defaults | Canal officiel d’Anaconda | repo.anaconda.com ↗ |
conda-forge | Communautaire, très actif et complet | conda-forge.org ↗ |
bioconda | Spécialisé dans la bioinformatique | bioconda.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ère | Conda | Mamba | Micromamba |
---|---|---|---|
Vitesse résolution | Lente (SAT solver Python) | 10-100x plus rapide | Très rapide (C++) |
Taille installation | ~500MB (Miniconda) | ~500MB + Conda | ~15MB (binaire autonome) |
Cas d’usage principal | Débutants, compatibilité | Remplacement direct | CI/CD, Docker |
Environnement base | Oui (requis) | Oui (hérité de Conda) | Non (optionnel) |
Compatibilité | 100% référence | 100% avec Conda | 99% (quelques commandes diff.) |
Installation | Simple | conda install mamba | Binaire unique |
Multi-OS | Oui | Oui | Oui |
Recommandation | Formation | Usage quotidien | Production/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 :
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.shbash Miniconda3-latest-Linux-x86_64.sh
Suivez les instructions, puis rechargez le shell :
source ~/.bashrc
Vérifiez l’installation :
conda --version
macOS
Téléchargez l’installateur depuis docs.conda.io ↗ puis exécutez :
bash Miniconda3-latest-MacOSX-x86_64.sh
Sur Apple Silicon (M1/M2/M3/M4), privilégiez Miniforge :
curl -L -O https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge3-MacOSX-arm64.shbash 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 :
conda --version
Configuration initiale
Après installation, quelques réglages de base assurent une expérience fluide :
1. Mise à jour de Conda
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
:
# Configuration recommandée par commandesconda config --add channels conda-forgeconda config --set channel_priority strictconda config --set show_channel_urls trueconda config --set auto_activate false
Vous pouvez vérifier la configuration finale avec :
# Vérifier que la configuration est bien appliquéeconda config --show channelsconda config --show channel_priorityconda 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 :
mkdir -p myapi/src myapi/tests && cd myapigit initprintf "__pycache__/\n*.lock\n.conda/\n" > .gitignore
Ensuite, configurez Conda pour le projet :
# Configuration recommandée pour le projetconda config --add channels conda-forgeconda config --set channel_priority strictconda 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 :
# Créer l'environnement avec tous les paquets nécessairesconda create -n myapi-dev python=3.11 flask==3.1.1 uvicorn pytest requests -c conda-forge
# Activer l'environnementconda 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 :
cat > src/app.py <<'PY'from flask import Flask, jsonifyapp = 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
:
# Créer un test simple directement avec echoecho 'def test_smoke(): assert 1 + 1 == 2' > tests/test_app.py
# Exécuter les tests avec pytestpytest
Étape 5 — Lancer l’app
On valide le bon fonctionnement de l’API en lançant l’application :
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.
# Désactiver l'environnement s'il est actifconda deactivate
# Lister les environnements restants pour vérifierconda env list
# Supprimer complètement l'environnementconda env remove -n myapi-test
# Ou supprimer plusieurs environnements d'un coupconda 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 :
- 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.