conda vs pip: Python CI環境にはどちらを?
condaとpipは重なりつつも異なる問題を解決します。CIではその差がセットアップ時間とネイティブライブラリに現れます。
pipはPyPIからPythonパッケージをインストールします。condaは、非Pythonの依存関係 (コンパイラ、CUDA、システムライブラリ) もインストールする、多言語対応のパッケージ・環境マネージャです。
| pip | conda | |
|---|---|---|
| スコープ | Pythonパッケージ (PyPI) | Python + ネイティブ / 非Pythonライブラリ |
| 環境マネージャ | なし (venvを使用) | あり、組み込み |
| ネイティブ依存関係の扱い | wheelsのみ | 強力 (バイナリパッケージ) |
| CIセットアップの重さ | 軽量 | より重い (インストーラ + solver) |
| 典型的な用途 | Web/アプリのコード | データサイエンス / ML / 科学計算 |
CIにおいて
condaは、ビルドが難しいネイティブ依存関係 (NumPy/SciPyスタック、GDAL、CUDAツールキット) を事前ビルド済みのバイナリとして扱う必要があるときに真価を発揮します。壊れやすいソースからのコンパイルを避けられます。その代償は、より重いCIセットアップと、歴史的に遅かったsolverです (mamba/micromambaがこれを緩和します)。普通のPythonアプリには、pipのほうが軽く、セットアップも速いです。
どちらも高速化する
condaのパッケージディレクトリまたはpipのwheel cacheを、environment.yml やrequirementsのlockでキー付けしてcacheしましょう。condaでは、より小さく速いインストールのためにCIでmicromambaを優先してください。
結論
重いネイティブ/科学計算の依存関係: conda (理想的にはmicromamba)。素のPythonアプリ: venvを伴うpip。依存関係が純Pythonかネイティブかに応じてツールを合わせましょう。
関連ガイド
Poetry vs uv: Faster Python Dependency Management in CIPoetry vs uv for Python CI: install speed, lockfiles, and resolver performance. Why uv is often dramatically…
pip vs Poetry: Which Python Dependency Tool for CI?pip vs Poetry for Python CI: lockfiles, reproducibility, install speed, and caching. Which dependency tool gi…
How to Cache Dependencies in GitHub Actions (Every Ecosystem)Cache dependencies in GitHub Actions with actions/cache - correct keys and paths for npm, yarn, pnpm, pip, Ma…