conda-lock - Cheatsheet di Blocco dell”Ambiente Conda Riproducibile
conda-lock risolve il problema di riproducibilità di conda. Un environment.yml elenca i pacchetti richiesti, quindi risolvere su due macchine una settimana di distanza può produrre versioni diverse — il classico “funziona sulla mia macchina”. conda-lock risolve l”ambiente una volta e scrive un file di blocco con versioni esatte, build e hash per ogni piattaforma a cui miri, in modo che gli install diventino deterministici e veloci (nessuna risoluzione al momento dell”installazione).
Installation
| Method | Command |
|---|
| pipx (recommended) | pipx install conda-lock |
| conda | conda install -c conda-forge conda-lock |
| pip | pip install conda-lock |
| Verify | conda-lock --version |
Generating a Lock File
# Lock for multiple platforms from an environment.yml
conda-lock -f environment.yml -p linux-64 -p osx-arm64 -p win-64
| Flag | Purpose |
|---|
-f, --file | Spec di input (environment.yml, pyproject.toml, meta.yaml) |
-p, --platform | Piattaforma target (ripetibile) |
-k, --kind | Tipo di output: lock (unificato), explicit, env |
--lockfile | Percorso di output (predefinito conda-lock.yml) |
--check-input-hash | Salta la risoluzione se gli input non sono cambiati |
Lock File Kinds
| Kind | Produces | Use |
|---|
lock | conda-lock.yml unificato (tutte le piattaforme) | Commit questo a git |
explicit | File .lock per piattaforma | conda create --file |
env | environment.yml renderizzato | Strumenti che si aspettano un file env normale |
# Render per-platform explicit files from the unified lock
conda-lock render -p linux-64
Installing From a Lock
# Create an environment exactly as locked
conda-lock install --name myenv conda-lock.yml
# Or with micromamba (fast)
micromamba create -n myenv -f conda-linux-64.lock
| Command | Description |
|---|
conda-lock install -n NAME | Crea/aggiorna l”env da un blocco |
conda-lock install --mamba | Usa mamba come solver/installer |
conda create --file X.lock | Installa direttamente un blocco esplicito |
Updating Dependencies
# Re-solve everything (new versions allowed)
conda-lock -f environment.yml -p linux-64 -p osx-arm64
# Update just one package, keep the rest pinned
conda-lock --update numpy -f environment.yml -p linux-64
| Task | Command |
|---|
| Full refresh | Riesegui conda-lock |
| Targeted bump | --update PKG |
| Verify inputs unchanged | --check-input-hash |
Including pip Dependencies
# environment.yml
name: myproject
channels: [conda-forge]
dependencies:
- python=3.12
- numpy
- pip
- pip:
- some-pypi-only-package==1.2.3
conda-lock risolve sia le dipendenze conda che pip nello stesso file di blocco, il che è importante perché mescolare i due in modo ad hoc è una fonte comune di ambienti rotti.
CI Pattern
# Deterministic, fast CI installs
- run: conda-lock install --name ci conda-lock.yml
- run: conda run -n ci pytest
| Practice | Why |
|---|
Commit conda-lock.yml | Il blocco è la fonte di verità |
| Lock all target platforms | I dev su macOS, CI su Linux |
| Regenerate deliberately | Gli aggiornamenti di dipendenza diventano diff revisionabili |
| Cache the env | I blocchi rendono il caching affidabile |
conda-lock vs Alternatives
| Aspect | conda-lock | environment.yml | pixi | uv |
|---|
| Reproducible | Pin esatti + hash | No | Blocco integrato | Blocco integrato |
| Conda ecosystem | Sì | Sì | Sì | No (PyPI) |
| Multi-platform lock | Sì | N/A | Sì | Sì |
| Best for | Blocco di progetti conda esistenti | Env semplici/ad hoc | Nuovi progetti basati su conda | Progetti Python puri |
Per i nuovi progetti considera pixi (blocco integrato) o uv per Python puro; conda-lock retro-attacca la riproducibilità nei workflow conda esistenti.
Resources