pyenv vs asdf: CIに適したPythonバージョンマネージャーは?
pyenvはPythonのバージョンのみを管理します。asdfは1つの.tool-versionsファイルからPythonとその他すべての言語を管理します。
pyenvは、.python-versionを介してインタープリタをインストールおよび切り替える、Pythonに特化したバージョンマネージャーです。asdfは、Node、Rubyなどとともに(プラグインを介して)Pythonを1つの.tool-versionsファイルで扱う多言語マネージャーです。
| pyenv | asdf | |
|---|---|---|
| 管理する言語 | 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のためにバージョンファイルをコミットしてください。