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étodo | Comando |
|---|
| pipx (recomendado) | pipx install conda-lock |
| conda | conda install -c conda-forge conda-lock |
| pip | pip install conda-lock |
| Verificar | conda-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
| Flag | Propósito |
|---|
-f, --file | Especificación de entrada (environment.yml, pyproject.toml, meta.yaml) |
-p, --platform | Plataforma objetivo (repetible) |
-k, --kind | Tipo de salida: lock (unificado), explicit, env |
--lockfile | Ruta de salida (predeterminado conda-lock.yml) |
--check-input-hash | Saltar re-resolver si entradas sin cambios |
Tipos de Archivo de Bloqueo
| Tipo | Produce | Usar |
|---|
lock | conda-lock.yml unificado (todas plataformas) | Confirmar esto en git |
explicit | Archivos .lock por plataforma | conda create --file |
env | environment.yml renderizado | Herramientas 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
| Comando | Descripción |
|---|
conda-lock install -n NAME | Crear/actualizar el env desde un bloqueo |
conda-lock install --mamba | Usar mamba como el solucionador/instalador |
conda create --file X.lock | Instalar 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
| Tarea | Comando |
|---|
| Refresco completo | Re-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áctica | Por qué |
|---|
Confirmar conda-lock.yml | El bloqueo es la fuente de verdad |
| Bloquear todas las plataformas objetivo | Devs en macOS, CI en Linux |
| Re-generar deliberadamente | Actualizaciones de dependencia se vuelven diffs revisables |
| Cachear el env | Los bloqueos hacen el caching confiable |
conda-lock vs Alternativas
| Aspecto | conda-lock | environment.yml | pixi | uv |
|---|
| Reproducible | Pines exactos + hashes | No | Bloqueo integrado | Bloqueo integrado |
| Ecosistema conda | Sí | Sí | Sí | No (PyPI) |
| Bloqueo multi-plataforma | Sí | N/A | Sí | Sí |
| Mejor para | Bloqueo de proyectos conda existentes | Envs simples/ad-hoc | Nuevos proyectos basados en conda | Proyectos 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