以前はpyenvを使ってPython実行環境をセットアップしたりしてたが、Pythonをビルドするところから始めるために必要なdev系パッケージが必要だったり、そのために管理者権限が必要だったりするので、もっと他に手軽な方法が無いか調べたところ、asdfやmiseが使えそうなので試してみた。
asdfは名前だけは知りつつも結局使わずじまいだったけど「最近はmiseというものがあるらしい」という情報を見たのでmiseを試してみることにした。
mise
https://mise.jdx.dev/mise.jdx.dev
読み方はミーズ
Pronounced "MEEZ ahn plahs"
miseそのものが何かはいろんなサイトで紹介されてるのでそちら参考。
一言でいうと「開発環境セットアップツール」とのこと。
mise単体でいろいろな開発ツール(インタプリタとかコンパイラなど)のインストールやバージョン管理・切り替えができる。アプリ開発者だけでなくインフラ系でもAWS CLIやAzure CLI、Terraformやkubectlもあるので入れてみると便利。
インストールと初期設定
https://mise.jdx.dev/getting-started.htmlmise.jdx.dev
Getting Startedに各環境ごとの手順が載っているのでその通りにやればいい。
curlで取得したインストールスクリプトを実行する方法もあるが、aptやdnfでもインストールできる。
# dnfでインストールする例 sudo dnf install -y dnf-plugins-core sudo dnf config-manager --add-repo https://mise.jdx.dev/rpm/mise.repo sudo dnf install -y mise
ちなみにFedora 41だとdnf config-managerのオプションが変わってエラーになるため、以下のように実行する。
sudo dnf config-manager addrepo --from-repofile=https://mise.jdx.dev/rpm/mise.repo ### これだとエラーになる sudo dnf config-manager --add-repo https://mise.jdx.dev/rpm/mise.repo
miseをインストールしたらアクティブ化のためにシェルに設定を追加する。
パッケージでインストールした場合はmiseはパスが通っているので特にパスを気にしないで良い。
(インストールスクリプトを)
# dnfなどでインストールした`mise`で`bash`使用中の場合 echo 'eval "$(mise activate bash)"' >> ~/.bashrc
シェルを再起動(ログインしなおしとか)すれば準備OK
tab補完の設定
mise completionはあるが、前述のmise activate bashで有効になる模様。
ただしそのままだとtab押下時に以下のエラーが発生する。
[zaki@fedora-dev2 ~]$ mise l Error: usage CLI not found. This is required for completions to work in mise. See https://usage.jdx.dev for more information.
メッセージが若干わかりづらい(「usage CLI」が無い、らしい)が、その場合は以下コマンドでusageプラグインを追加する。
[zaki@fedora-dev2 ~]$ mise use -g usage mise Installed executable into /home/zaki/.local/share/mise/installs/usage/2.0.3/usage mise usage@2.0.3 ✓ installed mise ~/.config/mise/config.toml tools: usage@2.0.3
これでタブ補完が効くようになる。
useや-gは後述。
2025.07.25追記: 上の手順でエラーは出ないがタブ補完が効かない場合は、以下を追加。
これでシェルを再起動すれば補完が効く。はず。
# This requires bash-completion to be installed mkdir -p ~/.local/share/bash-completion/completions mise completion bash --include-bash-completion-lib > ~/.local/share/bash-completion/completions/mise
https://mise.jdx.dev/installing-mise.html#autocompletion
公式ドキュメントの記述はサブディレクトリのパスが足りないので注意。
その他
そのほかの細かい環境ごとのインストール手順の説明はInstalling Miseにも載っている。
https://mise.jdx.dev/installing-mise.htmlmise.jdx.dev
Pythonインストール (パッケージのセットアップ)
ユーザーグローバルに使用する
Python 3.13.0を入れたいのであれば mise use -g python@3.13.0 を実行すればOK
### システムにデフォルトで入っているPython [zaki@fedora-dev2 ~]$ which python /usr/bin/python [zaki@fedora-dev2 ~]$ python --version Python 3.13.1 ### miseでPython 3.13.0をインストール [zaki@fedora-dev2 ~]$ mise use -g python@3.13.0 mise hint use multiple versions simultaneously with mise use python@3.12 python@3.11 mise hint installing precompiled python from astral-sh/python-build-standalone if you experience issues with this python (e.g.: running poetry), switch to python-build by running mise settings python.compile=1 mise python@3.13.0 ✓ installed mise ~/.config/mise/config.toml tools: python@3.13.0 [zaki@fedora-dev2 ~]$ ### 今miseで入れたインタプリタに切り替わっていることを確認 [zaki@fedora-dev2 ~]$ which python ~/.local/share/mise/installs/python/3.13.0/bin/python [zaki@fedora-dev2 ~]$ python --version Python 3.13.0 [zaki@fedora-dev2 ~]$
初回は依存するパッケージも追加されたりするがそれでも数秒でインストールされ使用可能になる。
-gオプションはグローバルに使うための指定で、どのディレクトリに移動してもこのpythonが使用される。
(グローバルはシステムワイドの意味ではなく、あくまで実行してるユーザー環境に閉じている)
特定のディレクトリ配下でのみ使用する
-gを指定しない場合は、mise useを実行したディレクトリ以下のみで指定のコマンドが使えるようになる。
複数のアプリ開発のプロジェクトをディレクトリ毎に持っていて、各プロジェクトで使用インタプリタのバージョンを分けたい場合などは便利。
### ~/local/src/app1 配下のみでPython 3.10.16を使いたい場合 [zaki@fedora-dev2 app1]$ pwd /home/zaki/local/src/app1 [zaki@fedora-dev2 app1]$ mise use python@3.10.16 mise python@3.10.16 ✓ installed mise ~/local/src/app1/mise.toml tools: python@3.10.16 [zaki@fedora-dev2 app1]$ [zaki@fedora-dev2 app1]$ which python ~/.local/share/mise/installs/python/3.10.16/bin/python [zaki@fedora-dev2 app1]$ python --version Python 3.10.16 ### ~/local/src/app1 のサブディレクトリでもPython 3.10.16が使用される [zaki@fedora-dev2 app1]$ mkdir subdir [zaki@fedora-dev2 app1]$ cd $_ [zaki@fedora-dev2 subdir]$ which python ~/.local/share/mise/installs/python/3.10.16/bin/python ### ~/local/src/app1 の外に出るとPython 3.10.16が使用状態が解除される [zaki@fedora-dev2 subdir]$ cd ../.. [zaki@fedora-dev2 src]$ python --version Python 3.13.0 [zaki@fedora-dev2 src]$ which python ~/.local/share/mise/installs/python/3.13.0/bin/python
バージョンを変更する
ユーザーグローバルにPython 3.13.0をセットアップしていたが、Python 3.12.8を使いたい場合
[zaki@fedora-dev2 ~]$ mise use -g python@3.12.8 mise python@3.12.8 ✓ installed mise ~/.config/mise/config.toml tools: python@3.12.8 [zaki@fedora-dev2 ~]$ python --version Python 3.12.8 [zaki@fedora-dev2 ~]$ which python ~/.local/share/mise/installs/python/3.12.8/bin/python
これで切り替わる。
また3.13.1に切り替える場合は再度3.13.1を指定すればOK
[zaki@fedora-dev2 ~]$ mise use -g python@3.13.0 mise ~/.config/mise/config.toml tools: python@3.13.0
インストール済みのパッケージ一覧はlistで見れる。
[zaki@fedora-dev2 ~]$ mise list Tool Version Source Requested python 3.10.16 python 3.12.8 python 3.13.0 ~/.config/mise/config.toml 3.13.0 python 3.13.1 usage 2.0.3 ~/.config/mise/config.toml latest
dev版 (未解決)
2025.01.18時点では3.14はdev版があるが、デフォルトでは使用できない。
[zaki@fedora-dev2 ~]$ mise use -g python@3.14-dev mise WARN no precompiled python found for 3.14-dev, force mise to use a precompiled version with `mise settings set python.compile false` mise ERROR failed to install core:python@3.14-dev mise ERROR git failed: Cmd(["git", "-C", "/home/zaki/.cache/mise/python/pyenv", "-c", "safe.directory=/home/zaki/.cache/mise/python/pyenv", "fetch", "--prune", "--update-head-ok", "origin", "master:master"]) No such file or directory (os error 2) mise ERROR Run with --verbose or MISE_VERBOSE=1 for more information
メッセージにある通りmise settings set python.compile trueを実行すればインストールできるかと思ったが、実行すると以下の通りで、なんとなく別の理由(環境回り)でインストールできないぽい。
が、今回これはやりたいことじゃないので保留。
[zaki@fedora-dev2 ~]$ mise use -g python@3.14-dev --verbose DEBUG ARGS: mise use -g python@3.14-dev --verbose DEBUG config: ~/.config/mise/config.toml DEBUG ls: "/home/zaki/.local/state/mise/hints" DEBUG install_some_versions: python@3.14-dev INFO python@3.14-dev install DEBUG Updating python-build in /home/zaki/.cache/mise/python/pyenv DEBUG current branch for "/home/zaki/.cache/mise/python/pyenv": master DEBUG updating /home/zaki/.cache/mise/python/pyenv to master DEBUG updating /home/zaki/.cache/mise/python/pyenv to master with git DEBUG $ git -C /home/zaki/.cache/mise/python/pyenv -c safe.directory=/home/zaki/.cache/mise/python/pyenv fetch --prune --update-head-ok origin master:master Error: 0: failed to install core:python@3.14-dev 1: git failed: Cmd(["git", "-C", "/home/zaki/.cache/mise/python/pyenv", "-c", "safe.directory=/home/zaki/.cache/mise/python/pyenv", "fetch", "--prune", "--update-head-ok", "origin", "master:master"]) No such file or directory (os error 2) Location: src/git.rs:121 Version: 2025.1.9 linux-x64 (b915c4f 2025-01-17) Backtrace omitted. Run with RUST_BACKTRACE=1 environment variable to display it. Run with RUST_BACKTRACE=full to include source snippets.
その他コマンド覚書
| 操作 | コマンド |
|---|---|
| インストール可能なパッケージ一覧 | mise ls-remote --all |
| インストール可能なプラグイン一覧 | mise plugins ls-remote |
| インストール可能な指定プラグイン/パッケージのバージョン一覧 | mise ls-remote <plugin名> |
| 現在利用中のプラグイン/パッケージ一覧 | mise current |
| インストール済みのプラグイン/パッケージ一覧 | mise list |
| パッケージインストール | mise install <package-name>@<version> |
| パッケージのアクティブ化(カレントディレクトリ) | mise use <package-name>@<version> |
| パッケージのアクティブ化(グローバル) | mise use -g <package-name>@<version> |
Pythonはmise plugins ls-remoteだと出てこなくてmise ls-remoteだと出てくる。対してusageはどっちにも出てきたりして、正直違いがよくわかっていない。
また、mise ls-remote --allの出力と、mise ls-remoteまで入力してtabを2回押下したときの候補一覧も異なる。
が、基本的にこの2つのコマンドでセットアップ可能なパッケージを探せるので事足りると思う。
リポジトリはアーカイブされているが、プラグイン一覧はここが見やすい。
環境
[zaki@fedora-dev2 ~]$ cat /etc/fedora-release
Fedora release 41 (Forty One)
[zaki@fedora-dev2 ~]$ mise version
_ __
____ ___ (_)_______ ___ ____ ____ / /___ _________
/ __ `__ \/ / ___/ _ \______/ _ \/ __ \______/ __ \/ / __ `/ ___/ _ \
/ / / / / / (__ ) __/_____/ __/ / / /_____/ /_/ / / /_/ / /__/ __/
/_/ /_/ /_/_/____/\___/ \___/_/ /_/ / .___/_/\__,_/\___/\___/
/_/
2025.1.9 linux-x64 (b915c4f 2025-01-17)