pyenvを使ってインストールしたPythonでNo module named '_tkinter'となったとき

pyenvを使ってインストールしたPythonで、tkinterを使おうとしたとき、エラーとなりました。

import _tkinter # If this fails your Python may not be configured for Tk
ModuleNotFoundError: No module named '_tkinter'


tkinterが自分の環境にインストールされているか調べてみました。
インストールされていないようなので、tkinterをインストールします。

$ python -m tkinter
import _tkinter # If this fails your Python may not be configured for Tk
ModuleNotFoundError: No module named '_tkinter'


home brewを使って、tcl-tkをインストールします。

$ brew install pyenv


pyenvがtcl-tkを使うように、python-buildスクリプトを修正します。

$ cd /usr/local/Cellar/pyenv/1.2.15/plugins/python-build/bin/python-build
$ cp python-build python-build_original
$ vi python-build


以下のように修正します。

【修正前】
$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


pyenvを使って、Pythonをインストールします。

$ pyenv install 3.7.5
$ pyenv global


tkinterが使えるか、テストしてみます。

$ python -m tkinter -c 'tkinter._test()'


小さな画面が表示されれば、成功です。