pyenv vs conda: Pythonバージョンの管理
pyenvはPythonインタープリタのバージョンをインストールし切り替えます。condaはPythonとバイナリパッケージを含む環境全体を管理します。
pyenvはプロジェクトごとにPythonバージョンをビルド・選択し、パッケージのインストールはpipや他のツールに委ねます。condaは独自のPythonとクロス言語のパッケージマネージャーを同梱するため、単一のconda環境がインタープリタとコンパイル済み依存の両方を固定します。pyenvは軽量でPython専用です。condaは重めですが、ネイティブ依存のスタックを一箇所で解決します。
| pyenv | conda | |
|---|---|---|
| 管理対象 | Pythonバージョン | バージョン + パッケージ |
| インストール方法 | ソースからビルド | ビルド済みバイナリ |
| 非Python依存 | なし | あり |
| フットプリント | 軽量 | 重め |
| 最適な用途 | Python専用のバージョン管理 | 完全な科学環境 |
CIでは
pyenvはインタープリタをソースからビルドするため、buildがcacheされない限りコールドなrunnerでは遅くなります。多くのCIセットアップは代わりにrunner提供のPythonやsetup-pythonを使います。condaはビルド済みのPythonとパッケージを取り込みますが、solverのコストを払います。単一の固定バージョンには、runner提供のPythonが通常最もシンプルです。condaは重いネイティブスタックに適します。
高速化
バージョンの固定をキーにして、ビルド済みインタープリタ (pyenv) またはpackage cache (conda) をcacheしましょう。どちらもCI runner上で実行されます。より高速なマネージドrunnerはbuildとsolveのステップを短縮します。
結論
開発マシンでPythonバージョンだけを管理する: pyenv(またはCIではsetup-python)。ネイティブの非Python依存を一緒に固定した完全な環境が必要: conda。多くのチームはCIで直接Pythonを固定し、condaは科学スタックのために取っておきます。