Ir al contenido

conda-lock - Bloqueo Reproducible de Entorno Conda Hoja de Trucos

conda-lock - Bloqueo Reproducible de Entorno Conda Hoja de Trucos

conda-lock resuelve el problema de reproducibilidad de conda. Un environment.yml lista paquetes solicitados, por lo que resolverlo en dos máquinas una semana aparte puede producir versiones diferentes — el clásico “funciona en mi máquina”. conda-lock resuelve el entorno una vez y escribe un archivo de bloqueo con versiones exactas, compilaciones y hashes para cada plataforma que apuntas, por lo que las instalaciones se vuelven deterministas y rápidas (sin resolver en tiempo de instalación).

Instalación

MétodoComando
pipx (recomendado)pipx install conda-lock
condaconda install -c conda-forge conda-lock
pippip install conda-lock
Verificarconda-lock --version

Generar un Archivo de Bloqueo

# Bloquear para múltiples plataformas desde un environment.yml
conda-lock -f environment.yml -p linux-64 -p osx-arm64 -p win-64
FlagPropósito
-f, --fileEspecificación de entrada (environment.yml, pyproject.toml, meta.yaml)
-p, --platformPlataforma objetivo (repetible)
-k, --kindTipo de salida: lock (unificado), explicit, env
--lockfileRuta de salida (predeterminado conda-lock.yml)
--check-input-hashSaltar re-resolver si entradas sin cambios

Tipos de Archivo de Bloqueo

TipoProduceUsar
lockconda-lock.yml unificado (todas plataformas)Confirmar esto en git
explicitArchivos .lock por plataformaconda create --file
envenvironment.yml renderizadoHerramientas esperando archivo env simple
# Renderizar archivos de bloqueo explícitos por plataforma desde el bloqueo unificado
conda-lock render -p linux-64

Instalar Desde un Bloqueo

# Crear un entorno exactamente como está bloqueado
conda-lock install --name myenv conda-lock.yml

# O con micromamba (rápido)
micromamba create -n myenv -f conda-linux-64.lock
ComandoDescripción
conda-lock install -n NAMECrear/actualizar el env desde un bloqueo
conda-lock install --mambaUsar mamba como el solucionador/instalador
conda create --file X.lockInstalar un bloqueo explícito directamente

Actualizar Dependencias

# Re-resolver todo (nuevas versiones permitidas)
conda-lock -f environment.yml -p linux-64 -p osx-arm64

# Actualizar solo un paquete, mantener el resto fijo
conda-lock --update numpy -f environment.yml -p linux-64
TareaComando
Refresco completoRe-ejecutar conda-lock
Bump dirigido--update PKG
Verificar entradas sin cambios--check-input-hash

Incluir Dependencias pip

# environment.yml
name: myproject
channels: [conda-forge]
dependencies:
  - python=3.12
  - numpy
  - pip
  - pip:
      - some-pypi-only-package==1.2.3

conda-lock resuelve dependencias conda y pip en el mismo archivo de bloqueo, que es importante porque mezclar los dos ad hoc es una fuente común de entornos rotos.

Patrón de CI

# Instalaciones de CI deterministas y rápidas
- run: conda-lock install --name ci conda-lock.yml
- run: conda run -n ci pytest
PrácticaPor qué
Confirmar conda-lock.ymlEl bloqueo es la fuente de verdad
Bloquear todas las plataformas objetivoDevs en macOS, CI en Linux
Re-generar deliberadamenteActualizaciones de dependencia se vuelven diffs revisables
Cachear el envLos bloqueos hacen el caching confiable

conda-lock vs Alternativas

Aspectoconda-lockenvironment.ymlpixiuv
ReproduciblePines exactos + hashesNoBloqueo integradoBloqueo integrado
Ecosistema condaNo (PyPI)
Bloqueo multi-plataformaN/A
Mejor paraBloqueo de proyectos conda existentesEnvs simples/ad-hocNuevos proyectos basados en condaProyectos puros-Python

Para nuevos proyectos considera pixi (bloqueo integrado) o uv para puro-Python; conda-lock retro-instala reproducibilidad en flujos de trabajo conda existentes.

Recursos