こんにちは、@yshr10icです。
Macのpyenv環境でtkinterを使おうとしたところ、躓いたので何をやったのかを備忘録として残しておきたいと思います。
前提条件
- PC:MacBook Pro(13-inch, 2020, Four Thunderbolt 3 ports)
- OS:macOS Big Sur(バージョン:11.3.1)
- pyenv:1.2.27-36-gb5d7216f
エラー①:ModuleNotFoundError: No module named ‘_tkinter’
Macのローカルで動くGUIツールを作りたいと思い、以下のサイトを参考にtkinterを軽く動かそうと思いました。
コマンドラインから
python -m tkinter
を実行すると簡素な Tk インターフェースを表示するウィンドウが開き、システムにtkinter
が正しくインストールされたことが分かり、さらにインストールされた Tcl/Tk がどのバーションなのかが表示されるので、そのバージョンの Tcl/Tk ドキュメントを選んで読めます。
上記のような記載があったので、python -m tkinter
を実行したところ以下のエラーが発生しました。
ModuleNotFoundError: No module named '_tkinter'
tkinterはPythonの標準パッケージに入っているのですが、内部でTck/TkというGUIツールを使っているらしく、それが原因でエラーとなってしまったようです。
こちらを解決するために、先人の知恵をお借りしました。
エラー②:pyenvでPythonをインストールできない
Qiitaを参考にpyenvでインストールしたPythonをアンインストールし、再度インストールしようとしたところ、以下のようなエラーが発生しました。
python-build: use openssl@1.1 from homebrew
python-build: use readline from homebrew
Downloading Python-3.8.3.tar.xz...
-> https://www.python.org/ftp/python/3.8.3/Python-3.8.3.tar.xz
Installing Python-3.8.3...
python-build: use readline from homebrew
python-build: use zlib from xcode sdk
BUILD FAILED (OS X 11.3.1 using python-build 1.2.18-19-gcf81e5a0)
(略)
./Modules/posixmodule.c:9221:15: error: implicit declaration of function 'sendfile' is invalid in C99 [-Werror,-Wimplicit-function-declaration]
ret = sendfile(in, out, offset, &sbytes, &sf, flags);
(略)
macOSをBig Surにアップグレードしたことによって、pyenvでPythonがインストールできなくなってしまったようです。
こちらを解決するために、先人の知恵をお借りしました。
最後に
先人の方たちのおかげで無事にMacでtkinterを動かすことができました。やはりQiitaやZennなどでエラー解決の記事を書いてくださるのは非常にありがたいなと再認識しました。私も他の方の役に立てるようにエラー解決の記事を書いていきたいと思いました。(今回は他の方の記事の紹介で終わってしまいましたが)