conda-lock - 再現可能な Conda 環境ロック チートシート
conda-lock は conda の再現可能性の問題を解決します。environment.yml はリクエストされたパッケージをリストし、2 つのマシンで 1 週間離れて解決すると異なるバージョンを生成する可能性があります — 古典的な「マシンで機能」。conda-lock は環境を 1 度解決し、ターゲットするすべてのプラットフォーム用の正確なバージョン、ビルド、ハッシュを持つロックファイルを書き込みます。インストールが決定論的で高速になります (インストール時の解決なし)。
インストール
| 方法 | コマンド |
|---|
| pipx (推奨) | pipx install conda-lock |
| conda | conda install -c conda-forge conda-lock |
| pip | pip install conda-lock |
| 確認 | conda-lock --version |
ロックファイル生成
# environment.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 | プレーン env ファイルを期待するツール |
# 統一ロックからプラットフォーム別 explicit ファイルをレンダリング
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 | explicit ロックを直接インストール |
依存性更新
# すべてを再解決 (新バージョン許可)
conda-lock -f environment.yml -p linux-64 -p osx-arm64
# 1 パッケージのみ更新、残りをピン留め
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 依存性を同じロックファイルに解決します。これは重要です。混在を ad-hoc で混ぜることは壊れた環境の一般的なソース。
CI パターン
# 決定論的で高速 CI インストール
- run: conda-lock install --name ci conda-lock.yml
- run: conda run -n ci pytest
| 実践 | なぜ |
|---|
conda-lock.yml をコミット | ロックは真実のソース |
| すべてのターゲットプラットフォームをロック | macOS の dev、Linux の CI |
| 意図的に再生成 | 依存性更新は レビュー可能な diff になる |
| env をキャッシュ | ロックはキャッシング信頼性 にする |
conda-lock 対 代替案
| 側面 | conda-lock | environment.yml | pixi | uv |
|---|
| 再現可能 | 正確なピン + ハッシュ | いいえ | 組み込みロック | 組み込みロック |
| Conda エコシステム | はい | はい | はい | いいえ (PyPI) |
| マルチプラットフォームロック | はい | N/A | はい | はい |
| 最適用途 | 既存 conda プロジェクトロック | シンプル/ad-hoc env | 新規 conda ベースプロジェクト | 純粋 Python プロジェクト |
新規プロジェクトは pixi (ロック組み込み) または uv (純粋 Python) を検討。conda-lock は既存 conda ワークフローに再現可能性を装着。
リソース