conda-lock - Verrouillage reproductible d’environnement Conda
conda-lock résout le problème de reproductibilité de conda. Un environment.yml liste les paquets demandés, donc le résoudre sur deux machines une semaine plus tard peut produire des versions différentes — le classique « ça marche sur ma machine ». conda-lock résout l’environnement une fois et écrit un fichier de verrouillage avec versions exactes, builds, et hashes pour chaque plateforme que vous ciblez, afin que les installations deviennent déterministes et rapides (pas de résolution au moment de l’installation).
Installation
| Méthode | Commande |
|---|
| pipx (recommandé) | pipx install conda-lock |
| conda | conda install -c conda-forge conda-lock |
| pip | pip install conda-lock |
| Vérifier | conda-lock --version |
Générer un fichier de verrouillage
# Verrouiller pour plusieurs plateformes à partir d'un environment.yml
conda-lock -f environment.yml -p linux-64 -p osx-arm64 -p win-64
| Flag | Objectif |
|---|
-f, --file | Spécification d’entrée (environment.yml, pyproject.toml, meta.yaml) |
-p, --platform | Plateforme cible (répétable) |
-k, --kind | Genre de sortie : lock (unifié), explicit, env |
--lockfile | Chemin de sortie (défaut conda-lock.yml) |
--check-input-hash | Passer la résolution si les entrées inchangées |
Genres de fichier de verrouillage
| Genre | Produit | Utiliser |
|---|
lock | conda-lock.yml unifié (toutes les plateformes) | Committer ceci à git |
explicit | Fichiers .lock per-plateforme | conda create --file |
env | environment.yml rendu | Outils attendant un fichier env simple |
# Rendre les fichiers explicites per-plateforme à partir du verrouillage unifié
conda-lock render -p linux-64
Installer à partir d’un verrouillage
# Créer un environnement exactement comme verrouillé
conda-lock install --name myenv conda-lock.yml
# Ou avec micromamba (rapide)
micromamba create -n myenv -f conda-linux-64.lock
| Commande | Description |
|---|
conda-lock install -n NAME | Créer/mettre à jour l’env à partir d’un verrouillage |
conda-lock install --mamba | Utiliser mamba comme solveur/installeur |
conda create --file X.lock | Installer un verrouillage explicite directement |
Mettre à jour les dépendances
# Résoudre tout à nouveau (nouvelles versions autorisées)
conda-lock -f environment.yml -p linux-64 -p osx-arm64
# Mettre à jour un seul paquet, garder le reste épinglé
conda-lock --update numpy -f environment.yml -p linux-64
| Tâche | Commande |
|---|
| Actualisation complète | Réexécuter conda-lock |
| Mise à jour ciblée | --update PKG |
| Vérifier les entrées inchangées | --check-input-hash |
Inclure les dépendances pip
# environment.yml
name: myproject
channels: [conda-forge]
dependencies:
- python=3.12
- numpy
- pip
- pip:
- some-pypi-only-package==1.2.3
conda-lock résout à la fois les dépendances conda et pip dans le même fichier de verrouillage, ce qui est important parce que mélanger les deux de manière ad hoc est une source courante d’environnements cassés.
Modèle CI
# Installations CI déterministes et rapides
- run: conda-lock install --name ci conda-lock.yml
- run: conda run -n ci pytest
| Pratique | Pourquoi |
|---|
Committer conda-lock.yml | Le verrouillage est la source de vérité |
| Verrouiller toutes les plateformes cibles | Devs sur macOS, CI sur Linux |
| Régénérer délibérément | Les mises à jour de dépendances deviennent des diffs examinables |
| Mettre en cache l’env | Les verrouillages rendent la mise en cache fiable |
conda-lock vs alternatives
| Aspect | conda-lock | environment.yml | pixi | uv |
|---|
| Reproductible | Pins exacts + hashes | Non | Verrouillage intégré | Verrouillage intégré |
| Écosystème Conda | Oui | Oui | Oui | Non (PyPI) |
| Verrouillage multi-plateforme | Oui | N/A | Oui | Oui |
| Meilleur pour | Verrouiller les projets conda existants | Envs simples/ad-hoc | Nouveaux projets basés sur conda | Projets Python purs |
Pour les nouveaux projets, considérer pixi (verrouillage intégré) ou uv pour Python pur ; conda-lock adapte la reproductibilité aux flux de travail conda existants.
Ressources