FLINTERS Engineer's Blog

FLINTERSのエンジニアによる技術ブログ

ようこそmise,さよならpyenv

こんにちは、データエンジニアの藤原です。 最近、開発に使用しているPCの入れ替えがあり、開発環境の見直しを行なっていました。

その中で、Pythonのバージョン管理について、今まで(標準的だと思っている)pyenvを利用していたのですが、近年は新しいツールが色々あるらしくmiseというツールを利用してみたので、触ってみた感想を書いていこうと思います。

miseとは

  • Like asdf (or nvm or pyenv but for any language) it manages dev tools like node, python, cmake, terraform, and hundreds more.
  • Like direnv it manages environment variables for different project directories.
  • Like make it manages tasks used to build and test projects.

と記載があるように、pyenv以外にもterraformなど他言語のバージョン管理に加え、色々できるようです。これはtfenvを併用する必要もなくなるのではないでしょうか。 さらにRustで書かれているため高速だとかいう噂です。

github.com

環境構築

$ curl https://mise.run | sh
$ ~/.local/bin/mise --version
2024.6.1 macos-arm64 (6a3f377 2024-06-03)

無事、執筆時点での最新版がインストールできましたね。

$ echo 'eval "$(~/.local/bin/mise activate zsh)"' >> ~/.zshrc

上記コマンドでシェルに紐付けます。(使用しているコマンドシェルがzshの場合)

これで最低限の設定は終了です。簡単ですね。

実行方法

$ mise use --global python@3.11
mise installing precompiled python from indygreg/python-build-standalone
mise if you experience issues with this python (e.g.: running poetry), switch to python-build
mise by running: mise settings set python_compile 1
mise python@3.11.9 ✓ installed
mise ~/.config/mise/config.toml tools: python@3.11.9
$ python -V
Python 3.11.9

上記コマンド(mise ~)でPythonのバージョンの切り替えができます。インストールされていない場合は、ここでインストールされます。

一瞬で完了した!?!?

pyenvとの実行時間比較

timeコマンドでPythonバージョンの切り替えにかかる実行時間比較してみます。

mise

$ time sh mise.sh
mise installing precompiled python from indygreg/python-build-standalone
mise if you experience issues with this python (e.g.: running poetry), switch to python-build
mise by running: mise settings set python_compile 1
mise python@3.12.0 ✓ installed                                                                                                                              
mise ~/.config/mise/config.toml tools: python@3.12.0
sh mise.sh  0.18s user 0.51s system 22% cpu 3.112 total

pyenv

$ time sh pyenv.sh
python-build: use openssl@3 from homebrew
python-build: use readline from homebrew
Downloading Python-3.12.0.tar.xz...
-> https://www.python.org/ftp/python/3.12.0/Python-3.12.0.tar.xz
Installing Python-3.12.0...
python-build: use readline from homebrew
python-build: use zlib from xcode sdk
Installed Python-3.12.0 to /Users/y_fujiwara/.pyenv/versions/3.12.0
sh pyenv.sh  109.92s user 53.71s system 128% cpu 2:07.74 total

Pythonのバージョンのダウンロードにかかる時間は、miseの場合3秒程度(バージョンの切り替え含む)、pyenvの場合2分7秒(versionの切り替え含まない)。 全然違いますね。

まとめ

  • Pythonのバージョンのダウンロード(切り替え)速度がpyenvに比べスムーズにできる
  • tfenvなど別のバージョン管理ツールの併用が不要そう。

とりあえず、使ってみて便利な機能見つけたら続編あるかもしれないです!