Pular para o conteúdo

conda-lock - Conda Environment Locking Reproduzível

conda-lock - Conda Environment Locking Reproduzível

conda-lock resolve o problema de reprodutibilidade do conda. Um environment.yml lista pacotes solicitados, então resolvê-lo em duas máquinas uma semana de diferença pode produzir versões diferentes — o clássico “funciona na minha máquina.” conda-lock resolve o ambiente uma vez e escreve um lock file com versões exatas, builds, e hashes para cada plataforma que você visa, então instalações se tornam determinísticas e rápidas (sem resolver em tempo de instalação).

Instalação

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

Gerando um Lock File

# Lock para múltiplas plataformas a partir de um environment.yml
conda-lock -f environment.yml -p linux-64 -p osx-arm64 -p win-64
FlagPropósito
-f, --fileEspecificação de entrada (environment.yml, pyproject.toml, meta.yaml)
-p, --platformPlataforma alvo (repetível)
-k, --kindTipo de saída: lock (unificado), explicit, env
--lockfileCaminho de saída (padrão conda-lock.yml)
--check-input-hashPular re-solving se entradas não mudaram

Tipos de Lock File

TipoProduzUso
lockconda-lock.yml unificado (todas as plataformas)Commit este para git
explicit.lock arquivos per-plataformaconda create --file
envenvironment.yml renderizadoFerramentas esperando um arquivo env simples
# Renderizar arquivos explicit per-plataforma a partir do lock unificado
conda-lock render -p linux-64

Instalando a Partir de um Lock

# Criar um ambiente exatamente como locked
conda-lock install --name myenv conda-lock.yml

# Ou com micromamba (rápido)
micromamba create -n myenv -f conda-linux-64.lock
ComandoDescrição
conda-lock install -n NAMECriar/atualizar o env a partir de um lock
conda-lock install --mambaUsar mamba como solver/installer
conda create --file X.lockInstalar um lock explícito diretamente

Atualizando Dependências

# Re-resolver tudo (novas versões permitidas)
conda-lock -f environment.yml -p linux-64 -p osx-arm64

# Atualizar apenas um pacote, manter o resto fixado
conda-lock --update numpy -f environment.yml -p linux-64
TarefaComando
Refresh completoRe-rodar conda-lock
Bump selecionado--update PKG
Verificar entradas não mudaram--check-input-hash

Incluindo Dependências pip

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

conda-lock resolve tanto dependências conda quanto pip no mesmo lock file, que é importante porque misturar os dois ad hoc é uma fonte comum de ambientes quebrados.

Padrão de CI

# Instalações determinísticas e rápidas de CI
- run: conda-lock install --name ci conda-lock.yml
- run: conda run -n ci pytest
PráticaPor quê
Commit conda-lock.ymlO lock é a fonte de verdade
Lock todas as plataformas alvoDevs em macOS, CI em Linux
Regenerar deliberadamenteAtualizações de dependência se tornam diffs revisionáveis
Cache o envLocks tornam caching confiável

conda-lock vs Alternativas

Aspectoconda-lockenvironment.ymlpixiuv
ReproduzívelPins exatos + hashesNãoLock integradoLock integrado
Ecossistema CondaSimSimSimNão (PyPI)
Lock multi-plataformaSimN/ASimSim
Melhor paraLocking de projetos conda existentesEnvs simples/ad-hocProjetos novos baseados em condaProjetos Python puros

Para novos projetos considere pixi (locking integrado) ou uv para Python puro; conda-lock retrofit reprodutibilidade em fluxos conda existentes.

Recursos