conda-lock - 재현 가능한 Conda 환경 락킹 치트시트
conda-lock은 conda의 재현성 문제를 해결합니다. environment.yml은 요청된 패키지를 나열하므로, 한 주 간격으로 두 머신에서 이를 풀면 다른 버전을 생성할 수 있습니다 — 클래식한 “내 머신에서 작동합니다.” conda-lock은 환경을 한 번 풀고 모든 플랫폼에 대한 정확한 버전, 빌드, 해시가 있는 락 파일을 작성하여 설치가 결정론적이고 빠르도록 만듭니다 (설치 시에 풀링 없음).
설치
| 방법 | 명령 |
|---|
| pipx (권장) | pipx install conda-lock |
| conda | conda install -c conda-forge conda-lock |
| pip | pip install conda-lock |
| 확인 | conda-lock --version |
락 파일 생성
# 환경.yml에서 여러 플랫폼에 대한 락
conda-lock -f environment.yml -p linux-64 -p osx-arm64 -p win-64
| 플래그 | 목적 |
|---|
-f, --file | 입력 스펙 (environment.yml, pyproject.toml, meta.yaml) |
-p, --platform | 대상 플랫폼 (반복 가능) |
-k, --kind | 출력 종류: lock (통합), explicit, env |
--lockfile | 출력 경로 (기본값 conda-lock.yml) |
--check-input-hash | 입력이 변경되지 않으면 재풀링 건너뛰기 |
락 파일 종류
| 종류 | 생성 | 사용 |
|---|
lock | 통합 conda-lock.yml (모든 플랫폼) | 이를 git에 커밋 |
explicit | 플랫폼별 .lock 파일 | conda create --file |
env | 렌더링된 environment.yml | 평탄 환경 파일을 예상하는 도구 |
# 통합 락에서 플랫폼별 명시적 파일 렌더링
conda-lock render -p linux-64
락에서 설치
# 정확히 락된 상태로 환경 생성
conda-lock install --name myenv conda-lock.yml
# 또는 micromamba (빠름)
micromamba create -n myenv -f conda-linux-64.lock
| 명령 | 설명 |
|---|
conda-lock install -n NAME | 락에서 env 생성/업데이트 |
conda-lock install --mamba | 솔버/설치자로 mamba 사용 |
conda create --file X.lock | 명시적 락 직접 설치 |
종속성 업데이트
# 모든 것을 다시 풀기 (새 버전 허용)
conda-lock -f environment.yml -p linux-64 -p osx-arm64
# 한 패키지만 업데이트, 나머지 고정
conda-lock --update numpy -f environment.yml -p linux-64
| 작업 | 명령 |
|---|
| 전체 새로고침 | conda-lock 다시 실행 |
| 타게팅된 범프 | --update PKG |
| 입력이 변경되지 않았는지 확인 | --check-input-hash |
pip 종속성 포함
# environment.yml
name: myproject
channels: [conda-forge]
dependencies:
- python=3.12
- numpy
- pip
- pip:
- some-pypi-only-package==1.2.3
conda-lock은 conda와 pip 종속성을 동일한 락 파일로 풀어서, 이는 두 개를 임시로 섞는 것이 깨진 환경의 일반적인 소스이기 때문에 중요합니다.
CI 패턴
# 결정론적, 빠른 CI 설치
- run: conda-lock install --name ci conda-lock.yml
- run: conda run -n ci pytest
| 관행 | 이유 |
|---|
conda-lock.yml 커밋 | 락이 진실의 소스 |
| 모든 대상 플랫폼 잠금 | macOS의 개발자, Linux의 CI |
| 의도적으로 재생성 | 종속성 업데이트가 검토 가능한 diff가 됨 |
| env 캐시 | 락이 캐싱을 신뢰할 수 있게 만듦 |
conda-lock vs 대안
| 측면 | conda-lock | environment.yml | pixi | uv |
|---|
| 재현 가능 | 정확한 핀 + 해시 | 아니오 | 기본 제공 락 | 기본 제공 락 |
| Conda 생태계 | 예 | 예 | 예 | 아니오 (PyPI) |
| 다중 플랫폼 락 | 예 | 해당 없음 | 예 | 예 |
| 최고의 용도 | 기존 conda 프로젝트 잠금 | 간단/임시 env | 새로운 conda 기반 프로젝트 | 순수 Python 프로젝트 |
새 프로젝트는 pixi (기본 제공 잠금) 또는 순수 Python을 위한 uv를 고려하세요; conda-lock은 기존 conda 워크플로에 재현성을 개조합니다.
리소스