👻

Mac&pyenv環境でtkinterが動かないときの対策

に公開

概要

Pythonの入門書をハンズオンで写経して動かそうとしたところ、tkinterが動かなかったので、色々調べてやってみました。
かなりハマったもののなんとか動いたので、備忘録と同じ悩みを持つ人の助けになればと思い、その時のコマンドを公開します。

※コマンドの順番も大事なので上から順番にやることをおすすめします。

エラー内容

このエラーが出ている人はこの記事を真似ると治るかもしれません。

python -m tkinter              
Traceback (most recent call last):
  File "<frozen runpy>", line 189, in _run_module_as_main
  File "<frozen runpy>", line 148, in _get_module_details
  File "<frozen runpy>", line 112, in _get_module_details
  File "/Users/k_tabuchi/.pyenv/versions/3.11.1/lib/python3.11/tkinter/__init__.py", line 38, in <module>
    import _tkinter # If this fails your Python may not be configured for Tk
    ^^^^^^^^^^^^^^^
ModuleNotFoundError: No module named '_tkinter'

やりかた

brewでpyenvをアップグレード

brew update
brew upgrade pyenv

使えるpythonのバージョンを確認

pyenv install --list | grep 3.10

アップグレード後の再インストール

env \
  LDFLAGS="-L/opt/homebrew/opt/tcl-tk/lib" \
  CPPFLAGS="-I/opt/homebrew/opt/tcl-tk/include" \
  PKG_CONFIG_PATH="/opt/homebrew/opt/tcl-tk/lib/pkgconfig" \
  PYTHON_CONFIGURE_OPTS="--with-tcltk-includes='-I/opt/homebrew/opt/tcl-tk/include' --with-tcltk-libs='-L/opt/homebrew/opt/tcl-tk/lib -ltk9.0 -ltcl9.0'" \
  pyenv install 3.10.13

使うpythonのバージョンを3.10.13にする。

新しすぎてもダメだったりするようです。

pyenv global 3.10.13

tkinterが動いたか確認。

python -m tkinter

以下が表示されたら動いています。

→ python -m tkinter
DEPRECATION WARNING: The system version of Tk is deprecated and may be removed in a future release. Please don't rely on it. Set TK_SILENCE_DEPRECATION=1 to suppress this warning.

以上です。お疲れ様でした。

株式会社ONE WEDGE

【Serverlessで世の中をもっと楽しく】 ONE WEDGEはServerlessシステム開発を中核技術としてWeb系システム開発、AWS/GCPを利用した業務システム・サービス開発、PWAを用いたモバイル開発、Alexaスキル開発など、元気と技術力を武器にお客様に真摯に向き合う価値創造企業です。
https://onewedge.co.jp

Discussion