MacでPythonのGUIアプリを動かそうとすると、ModuleNotFoundError: No module named '_tkinter' というエラーに出くわすことがあります。
原因はほぼ一つで、Homebrewが Python 本体と tkinter を別パッケージに分けているからです。しかもPythonのマイナーバージョンごとに別パッケージになっています。
したがって解決策も明確です。自分が使っている Python のバージョンを確認し、それに対応する python-tk@X.Y を入れる——これだけで済むケースがほとんどです。
この記事は2025年の公開後、2026年9月に見直しました。 当時は tcl-tk の追加インストールと環境変数の設定を必須の手順として書いていましたが、通常は不要です。手元のmacOSで再検証したうえで、必要な場合とそうでない場合を切り分けました。
スポンサーリンク
まず自分のPythonバージョンを確認する
ここを確認せずにコマンドをコピーすると、いつまでも解決しません。
python3 -V
Python 3.14.6
この場合に必要なのは python-tk@3.14 です。3.13 用を入れても 3.14 では読み込まれません。
どのPythonが使われているかも確認しておきます。
which -a python3
/Users/you/project/.venv/bin/python3 ← 仮想環境
/opt/homebrew/bin/python3 ← Homebrew
/Users/you/.pyenv/shims/python3 ← pyenv
/usr/bin/python3 ← macOS標準
複数のPythonが混在しているのが、この問題が長引く最大の理由です。 上から順に優先されるので、いま動いているのがどれなのかを把握してください。
エラーの再現と原因
実際に、python-tk を入れていない Python 3.14 で実行すると次のようになります。
python3 -c "import tkinter"
ModuleNotFoundError: No module named '_tkinter'
tkinter ではなく _tkinter が見つからないと出るのがポイントです。tkinter(Pythonのコード)はあるのに、その土台となるC拡張モジュール _tkinter が無い状態を指しています。
Homebrew の Python は、GUIを使わない用途を想定してtkinterを含めずにビルドされています。必要な人だけが python-tk を追加する設計です。
スポンサーリンク
解決策1:python-tk を入れる(ほとんどはこれで解決)
バージョンを合わせてインストールします。
# Python 3.14 を使っている場合
brew install python-tk@3.14
# 3.13 なら
brew install python-tk@3.13
用意されているバージョンは brew search python-tk で確認できます。
brew search python-tk
python-tk@3.9 python-tk@3.10 python-tk@3.11
python-tk@3.12 python-tk@3.13 python-tk@3.14
インストール後に確認します。
python3 -c "import tkinter; print(tkinter.TkVersion)"
9.0
バージョン番号が表示されれば成功です。GUIウィンドウで確認したい場合は次のコマンドを使います。
python3 -m tkinter
小さなウィンドウが開けば正常です。
tcl-tk を別途インストールする必要はありません。 python-tk が依存関係として一緒に入れてくれます。環境変数の設定も通常は不要です。
解決策2:仮想環境を作り直す
python-tk を入れたのに解決しない場合、仮想環境が原因のことがあります。
venv は作成した時点のPythonを参照するため、あとから python-tk を入れても、既存の仮想環境には反映されないことがあります。
# 仮想環境の外で確認する
deactivate
python3 -c "import tkinter; print('OK')"
# 外では動くなら、仮想環境を作り直す
rm -rf .venv
python3 -m venv .venv
source .venv/bin/activate
python3 -c "import tkinter; print('OK')"
「仮想環境の外では動くが、中では動かない」なら、ほぼこれです。
スポンサーリンク
解決策3:pyenv を使っている場合
pyenv は事情が違います。 pyenv は Python をソースからビルドするため、ビルド時に tcl-tk が見つからないと、tkinter 無しのPythonができあがります。
この場合、あとから python-tk を入れても解決しません。tcl-tk を先に入れて、Pythonをビルドし直す必要があります。
# 先に tcl-tk を入れる
brew install tcl-tk
# ビルド時に tcl-tk を参照させて入れ直す
env PYTHON_CONFIGURE_OPTS="--with-tcltk-includes=$(brew --prefix tcl-tk)/include --with-tcltk-libs='-L$(brew --prefix tcl-tk)/lib -ltcl9.0 -ltk9.0'" pyenv install 3.13.0
ライブラリ名のバージョン部分(tcl9.0 / tk9.0)は環境によって変わります。 確認してから指定してください。
ls $(brew --prefix tcl-tk)/lib | grep -E "libtcl|libtk"
環境変数の設定が本当に必要になるのは、この「自分でビルドする場合」だけです。 Homebrew の Python をそのまま使う分には要りません。
解決策4:とりあえず動かしたいなら標準のPython
macOSに最初から入っている Python でも tkinter は使えます。
/usr/bin/python3 -c "import tkinter; print(tkinter.TkVersion)"
8.5
ただし常用はおすすめしません。 理由は3つです。
- Tkのバージョンが古い(8.5系。Homebrew版は9.0系)
- macOSのアップデートで変更・削除される可能性がある
- システム領域なのでパッケージを自由に入れられない
「今すぐ動作確認したいだけ」のときの手段と考えてください。
Homebrewの再インストールは最後の手段
公開当時の記事では「Homebrewの Python をアンインストールして再インストール」を挙げていましたが、これは影響範囲が大きすぎます。
Python に依存している他のパッケージまで巻き添えになるため、ここまで挙げた手順を試したうえで、それでも解決しない場合に限って検討してください。
その前に確認する価値があるのはこちらです。
# リンクが壊れていないか確認する
brew doctor
# python-tk が実際に入っているか
brew list | grep python-tk
切り分けの順番
迷ったら、この順に確認してください。
| 確認すること | コマンド | その結果は |
|---|---|---|
| 1. Pythonのバージョン | python3 -V |
対応する python-tk@X.Y を入れる |
| 2. どのPythonか | which -a python3 |
pyenv なら解決策3へ |
| 3. 仮想環境の外では動くか | deactivate して確認 |
動くなら venv を作り直す |
| 4. とりあえず動かしたい | /usr/bin/python3 |
一時的な確認用 |
GUIツールを実際に作る
tkinter が動くようになったら、実際にツールを作れます。私はペアワイズ法のテストケース生成ツールを作りました。
pip install allpairspy pandas
- allpairspy:ペアワイズのテストケースを生成するライブラリ
- pandas:CSV出力などのデータ処理
作り方はMacで動作するペアワイズテスト生成GUIツールを作ってみたにまとめています。ペアワイズ法そのものについてはペアワイズテストの基本と実践方法をどうぞ。
まとめ
- エラーの原因はHomebrewが Python と tkinter を別パッケージにしていること
- まず
python3 -Vでバージョンを確認し、対応するpython-tk@X.Yを入れる tcl-tkの追加インストールと環境変数の設定は通常不要(python-tk が依存で入れる)- 仮想環境の中だけ失敗するなら、venv を作り直す
- pyenv の場合はビルドし直しが必要。 ここでだけ環境変数の指定が要る
/usr/bin/python3でも動くが、Tkが8.5系と古く常用には向かない- Homebrewの再インストールは最後の手段
複数のPythonが混在していると、原因の切り分けが一気に難しくなります。「いま動いているPythonはどれか」を最初に確認するのが、遠回りしないコツです。
