Skip to content
Latchkey

pyenv vs asdf: CIに適したPythonバージョンマネージャーは?

pyenvはPythonのバージョンのみを管理します。asdfは1つの.tool-versionsファイルからPythonとその他すべての言語を管理します。

pyenvは、.python-versionを介してインタープリタをインストールおよび切り替える、Pythonに特化したバージョンマネージャーです。asdfは、Node、Rubyなどとともに(プラグインを介して)Pythonを1つの.tool-versionsファイルで扱う多言語マネージャーです。

pyenvasdf
管理する言語Pythonのみ多数(プラグイン)
pinファイル.python-version.tool-versions
最適な用途Pythonのみのリポジトリ多言語リポジトリ
CIでの代替多くはsetup-pythonすべての言語に1つのツール
Pythonのビルドインタープリタをコンパイルpythonプラグイン経由(内部でpyenv)

CIでは

Pythonのみのリポジトリでは、pyenv(または.python-versionを読むGitHubのsetup-python)が最も軽量な方法です。多言語リポジトリでは、asdfがPythonとその他すべての言語を1つのファイルで固定します - そのPythonプラグインは内部でpyenvを使うため、統一されたpinningで同じインタープリタが得られます。asdfはプラグインのセットアップが加わりますが、複数の別々のマネージャーを不要にします。

固定してキャッシュする

.python-versionまたは.tool-versionsをコミットして、CIが正確なローカルインタープリタをビルドするようにし、可能な限りビルド済みインタープリタをキャッシュしてください(Pythonのコンパイルは遅いため)。ビルドはCIのrunner上で実行されます。より高速なマネージドrunnerは、コールドなインタープリタのコンパイルを短縮します。

結論

最小限のセットアップを望むPythonのみのリポジトリ: pyenv(またはsetup-python)。すべての言語に1つのツールとpinファイルを使いたい多言語リポジトリ: asdf。いずれの場合も、再現可能なCIのためにバージョンファイルをコミットしてください。

関連ガイド