mise を使ってる環境で python-version
が存在するディレクトリへ移動した際に
mise WARN deprecated [idiomatic_version_file_enable_tools]:
を目にすることがあります。
特別な理由が無ければ
mise settings add idiomatic_version_file_enable_tools python
と指定しましょう。
これで以下の優先順位でバージョンが選択されます。
./mise.toml
./.python-version
$HOME/.config/mise/config.toml
どういうことか
$ mise version
2025.5.2 linux-x64 (2025-05-07)
$ uv --version
uv 0.7.2
$ uv init python_app_dir
Initialized project `python-app-dir` at `/home/USER/python_app_dir`
$ ls python_app_dir/.python-version
python_app_dir/.python-version
$ cd python_app_dir/
mise WARN deprecated [idiomatic_version_file_enable_tools]:
Idiomatic version files like ~/python_app_dir/.python-version are currently enabled by default. However, this will change in mise 2025.10.0 to instead default to disabled.
You can remove this warning by explicitly enabling idiomatic version files for python with:
mise settings add idiomatic_version_file_enable_tools python
You can disable idiomatic version files with:
mise settings add idiomatic_version_file_enable_tools "[]"
See https://github.com/jdx/mise/discussions/4345 for more information.
これは .python-version
といった、ランタイムのバージョン指定ファイルが存在している時に mise が出力している WARN です。この背景は書いてある通りで
今は
.python-version
で指定されたランタイムのバージョンを有効化したよ。でも mise 2025.10.0 からは無視するよ。だから mise のidiomatic_version_file_enable_tools
オプションを指定してね。
というものです。
具体的には、以下のどちらかを指定しましょうとなっています。
mise settings add idiomatic_version_file_enable_tools python(ランタイム名)
mise settings add idiomatic_version_file_enable_tools "[]"
実際の挙動と、今後困らないようにするためのベストプラクティスを探ってみました。
設定毎の挙動の違い
mise settings add idiomatic_version_file_enable_tools python(ランタイム名)
を指定した場合
.python-version
で指定されているバージョンが選択されます。
$ mise settings add idiomatic_version_file_enable_tools python
$ mise settings get idiomatic_version_file_enable_tools
["python"]
$ cat .python-version
3.12
$ python3 --version
Python 3.12.10
$ mise ls python
Tool Version Source Requested
python 3.12.10 ~/python_app_dir/.python-version 3.12
python 3.13.3
ちなみに idiomatic_version_file_enable_tools
の設定は ~/.config/mise/config.toml
に書かれています。
mise settings add idiomatic_version_file_enable_tools "[]"
を指定した場合
$HOME/.config/mise/config.toml
(= mise use -g python@VERSION
) で指定されているバージョンが選択されます。 .python-version
は無視されます。
$ mise settings set idiomatic_version_file_enable_tools "[]"
$ mise settings get idiomatic_version_file_enable_tools
[]
$ cat .python-version
3.12
$ python3 --version
Python 3.13.3
$ mise ls python
Tool Version Source Requested
python 3.12.10
python 3.13.3 ~/.config/mise/config.toml latest
※ 確実に上書きするため mise settings set
で指定しています。
ちなみに1: idiomatic_version_file_enable_tools
にランタイムが指定されているが .python-version
が無い場合
$HOME/.config/mise/config.toml
で指定されているバージョンが選択されます。mise のデフォルト挙動ですね(あたりまえだな)。
$ mise settings add idiomatic_version_file_enable_tools python
$ mise settings get idiomatic_version_file_enable_tools
["python"]
$ cat .python-version
cat: .python-version: No such file or directory
$ python3 --version
Python 3.13.3
$ mise ls python
Tool Version Source Requested
python 3.12.10
python 3.13.3 ~/.config/mise/config.toml latest
ちなみに2:idiomatic_version_file_enable_tools
にランタイムが指定されていて .python-version
と mise.toml
が同時に存在した場合
mise.toml
は mise use python@VERSION
すると作成されます。
$ mise settings get idiomatic_version_file_enable_tools
["python"]
$ cat .python-version
3.12
$ cat mise.toml
[tools]
python = "3.13"
$ python3 --version
Python 3.13.3
$ mise ls python
Tool Version Source Requested
python 3.12.10
python 3.13.3 ~/python_app_dir/mise.toml 3.13
mise.toml
が優先されます。
目的と対応すべき事
.python-version
があるということは使ってほしい意図があると考えられるため、それが適用されるべきかと思います。
しかし mise は今後 .python-version
を無視する挙動がデフォルトになるので、理由が無ければ
mise settings add idiomatic_version_file_enable_tools python
と、.python-version
を参照する設定が良いでしょう。
これで冒頭にも書いた通り、
./mise.toml
./.python-version
$HOME/.config/mise/config.toml
の順番でバージョンが選択されます。
あとがき
今回は Python を対象にしましたが、Ruby や Go などでも同様です。
※ idiomatic version file って言うんですね、今回初めて知った。
[EoT]