Python のバージョン管理に asdf を導入してみた

Python のランタイムバージョン管理ツールとして asdf を導入する方法と各種設定についてまとめていきます
2023.10.30

はじめに

おばんです!データアナリティクス事業本部ビジネスソリューション部の大谷(おおや)です。

新卒研修を終え、ビジネスソリューション部に JOIN してから Python のバージョン管理ツールを asdf に変更したのでその導入方法と各種設定についてまとめてみました。

asdf とは

Python などの各種プログラミング言語の実行環境は、プロジェクト内では安定バージョンを、検証には最新バージョンを使用したいなど、プロジェクトや状況によって使用したバージョンが異なります。

その際に、必要なのが asdf を始めとしたランタイムバージョン管理ツールです。

asdf では、 Python や Node.js を始めとした様々なツールのバージョン管理に対応していることが魅力のひとつです!

今では私も多くのツールのバージョン管理を asdf ひとつで行なっています。

対応しているツールについて興味がある方は公式ドキュメントの Plugins ページを確認してみてください。

環境

  • OS: macOS v13.6(Apple M2)
  • シェル: GNU Bash v5.2.15
  • Homebrew: v4.1.17

asdf の導入方法

依存パッケージのインストール

asdf が依存している各パッケージを Homebrew を使用してインストールします。

brew install coreutils curl git

asdf のインストール

asdf 自体のインストール方法はいくつかあります。

私はパッケージを一括管理したいため、 Homebrew を使用してインストールしました。

brew install asdf

※ 公式ドキュメントではgitコマンドを使用してインストールすることを強くおすすめしているため、各自で取捨選択するようにしてください。

git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v0.13.1

パスを通す

asdfコマンドを使用できるようにするために、下記公式ドキュメントを参考にパスを通します。

私の場合は Bash + Homebrew のため、下記コマンドを実行しました。

echo -e "\n. \"$(brew --prefix asdf)/libexec/asdf.sh\"" >> ~/.bash_profile

また、asdfコマンドの補完が効くように、下記コマンドを実行しておきます

echo -e "\n. \"$(brew --prefix asdf)/etc/bash_completion.d/asdf.bash\"" >> ~/.bash_profile

Python プラグイン

Python プラグインのインストール

まずは、 Python のプラグインとリポジトリを確認します

asdf plugin list all | grep python

(出力結果)
python                       *https://github.com/danhper/asdf-python.git

続いて、出力結果をもとに、リポジトリを確認して、プラグインをインストールするために必要な依存関係などを確認します。

Python のプラグインに関しては必要な依存関係はないようです。

それでは、下記コマンドを実行して、プラグインをインストールします。

asdf plugin add python https://github.com/danhper/asdf-python.git

最後に実行が完了したら、プラグインがインストールできたか確認します。

asdf plugin list

(出力結果)
python

バージョン管理

インストール可能なバージョン一覧を確認

下記コマンドを実行することで、インストールしたいバージョンに対応しているかどうか一覧を表示します。

asdf list all python

上記コマンドのみの場合、あまりにも多くのバージョンが出力されるため、 私はよく、| grep ^3\.9\.*などを付与して確認したい部分だけ表示するようにしています。

また、安定バージョンのみを確認したい場合は、下記コマンドで確認することができます。

asdf latest python <version>
# 例1) asdf latest python
# 例2) asdf latest python 3.9

バージョンのインストール

下記コマンドを実行することで、各種バージョンをインストールすることができます。

asdf install python <version>
# 例) asdf install python 3.9.18

また、安定バージョンをインストールしたい場合は、下記コマンドで確認することができます。

asdf install python latest
# または
asdf install python latest:<version>

使用するバージョンを設定

下記コマンドを実行することで、使用するglobalバージョンを設定することができます。

バージョン情報は、$HOME/.tool-versionsに書き込まれます。

asdf global python <version>

下記コマンドを実行することで、実行したディレクトリ内で使用したいlacalバージョンを設定することができます。

バージョン情報は、$PWD/.tool-versionsに書き込まれます。

asdf local python <version>

インストール済みバージョンの一覧

下記コマンドを実行することで、インストール済みのバージョン一覧を表示します。

asdf list python

不要なバージョンのアンインストール

下記コマンドを実行することで、使用するバージョンをアンインストールすることができます。

asdf uninstall python <version>

デフォルトパッケージ

どの Python バージョンでも使用する(常にインストール)する Python の外部ライブラリがあれば、$HOME/.default-python-packagesを作成して、下記のように記述することでバージョンのインストール後に自動でpip installしてくれます。

awsume
boto3
cfn-lint
fsspec
s3fs

pyyaml
requests

※ 一部ライブラリに関しては、自動インストール時にエラーが発生する場合があります。その場合はデフォルトパッケージから外して、手動でのインストール等を検討してください。

おわりに

ランタイムバージョン管理ツールは、たくさんあります。

その中でも本日は、 asdf に焦点を当て、 Python のバージョン管理についてまとめました。

asdf の真価は、 Python のみならず複数のツールのバージョンを管理することで発揮されると思うので、ぜひ他のツールのバージョン管理にも使用してみてください!