top-banner

MacのPython環境でtkinterを使えるようにする

近頃、pythonを勉強中なのですが、それは突然やってきました。
pythonの技術本に記載されているコードをコピーして実行したところ、tkinter が使えないではありませんか!そんなモジュールは無いと怒られます😓
『いやいや、そんなはず無いじゃん。面倒くせえなぁ、変な文字コードが入ったか🌝?』と思って色々修正してみたのですが 、エラーは解消されません。

困ったときのGoogle先生でエラーメッセージを調べたところ、Macpython環境を使っていると遭遇する事象の様です。
解決手順が分かりましたので備忘録として残します。
また、解決にあたり下記のサイトを参考にさせて頂きました。
【Python】tkinterのアップデート失敗した備忘録【インポートエラー】 | 科学のメモ帳


本記事は Homebrew と pyenv の環境を想定しています。
構築手順を知りたい方は以下の記事からどうぞ。
spacegeek.hatenadiary.com



目次


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/

f:id:spacegeek:20210522173924p:plain

該当のディレクトリが開くと、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

f:id:spacegeek:20210522174345p:plain

変更後
$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

f:id:spacegeek:20210522175156p:plain


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 があるファイルを実行します。
エラーが出ずに実行できたら成功です。
f:id:spacegeek:20210522175950p:plain