MacのPython環境でtkinterを使えるようにする
近頃、pythonを勉強中なのですが、それは突然やってきました。
pythonの技術本に記載されているコードをコピーして実行したところ、tkinter が使えないではありませんか!そんなモジュールは無いと怒られます😓
『いやいや、そんなはず無いじゃん。面倒くせえなぁ、変な文字コードが入ったか🌝?』と思って色々修正してみたのですが 、エラーは解消されません。
困ったときのGoogle先生でエラーメッセージを調べたところ、Macでpython環境を使っていると遭遇する事象の様です。解決手順が分かりましたので備忘録として残します。
また、解決にあたりこちらのサイトを参考にさせて頂きました。
本記事は Homebrew と pyenv の環境を想定しています。
構築手順を知りたい方はこちらをどうぞ。
なお、この記事はブログの過去記事をほぼそのまま転用した為、Zennで見づらい等ありましたらブログの方が分かりやすい?かもです。
Pythonのアンインストール
pyenv でPythonをインストールしていましたので、pyenvでPythonをアンインストールします。
% pyenv uninstall 3.8.5
Tcl/Tkのインストール
Hombrewからtcl-tkのパッケージをインストールします。
% brew install tcl-tk
python-buildを修正
python-buildというファイルの中身を書き換えます。
まずは、pyenvのバージョンを調べます。
% pyenv --version
pyenv 1.2.27
次にFinder上で、shift + ⌘(command) + G と入力します。そうすると、ディレクトリパスを入力するポップアップが開きます。
ここで先ほど調べたバージョンを元に以下のようなパスを入力します。
/usr/local/Cellar/pyenv/<version>/plugins/python-build/bin/
該当のディレクトリが開くと、python-build というファイルがあるので、これを適当なエディタで開きます。(私は、CotEditorを使いました。)
ファイルを開いて、782行目に
-with-tcltk-includes='-I/usr/local/opt/tcl-tk/include' --with-tcltk-libs='-L/usr/local/opt/tcl-tk/lib -ltcl8.6 -ltk8.6'
という文字列を追加します。
変更前
$CONFIGURE_OPTS ${!PACKAGE_CONFIGURE_OPTS} "${!PACKAGE_CONFIGURE_OPTS_ARRAY}" || return 1
変更後
$CONFIGURE_OPTS --with-tcltk-includes='-I/usr/local/opt/tcl-tk/include' --with-tcltk-libs='-L/usr/local/opt/tcl-tk/lib -ltcl8.6 -ltk8.6'
${!PACKAGE_CONFIGURE_OPTS} "${!PACKAGE_CONFIGURE_OPTS_ARRAY}" || return 1
Python再インストール
pyenv でPythonを再インストールし、pyenv versionsコマンドでPythonがインストールしたバージョンに設定されていることを確認します。
% pyenv install 3.8.5
% pyenv versions
system
* 3.8.5 (set by /usr/local/var/pyenv/version)
tkinterの確認
import tkinter があるファイルを実行します。
エラーが出ずに実行できたら成功です。
Discussion
ためになる記事、ありがとうございます。
python-buildを直接いじるのは乱暴な気がしましたので、環境変数で指定してやるのがスムーズかもしれません。
コメントありがとうございます。
この記事を書いた当時は、よくわからずにpython-buildの設定を変更していましたが、今から振り返ると確かに乱暴ですね😆
環境変数良さそうです👍🏻