Salta ai contenuti

conda-lock - Cheatsheet di Blocco dell'Ambiente Conda Riproducibile

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

MethodCommand
pipx (recommended)pipx install conda-lock
condaconda install -c conda-forge conda-lock
pippip install conda-lock
Verifyconda-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
FlagPurpose
-f, --fileSpec di input (environment.yml, pyproject.toml, meta.yaml)
-p, --platformPiattaforma target (ripetibile)
-k, --kindTipo di output: lock (unificato), explicit, env
--lockfilePercorso di output (predefinito conda-lock.yml)
--check-input-hashSalta la risoluzione se gli input non sono cambiati

Lock File Kinds

KindProducesUse
lockconda-lock.yml unificato (tutte le piattaforme)Commit questo a git
explicitFile .lock per piattaformaconda create --file
envenvironment.yml renderizzatoStrumenti 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
CommandDescription
conda-lock install -n NAMECrea/aggiorna l”env da un blocco
conda-lock install --mambaUsa mamba come solver/installer
conda create --file X.lockInstalla 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
TaskCommand
Full refreshRiesegui 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
PracticeWhy
Commit conda-lock.ymlIl blocco è la fonte di verità
Lock all target platformsI dev su macOS, CI su Linux
Regenerate deliberatelyGli aggiornamenti di dipendenza diventano diff revisionabili
Cache the envI blocchi rendono il caching affidabile

conda-lock vs Alternatives

Aspectconda-lockenvironment.ymlpixiuv
ReproduciblePin esatti + hashNoBlocco integratoBlocco integrato
Conda ecosystemNo (PyPI)
Multi-platform lockN/A
Best forBlocco di progetti conda esistentiEnv semplici/ad hocNuovi progetti basati su condaProgetti 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