python で GUI アプリを作る必要に迫られたが、情弱なので、標準ライブラリの tkinter とやらがあるらしいぞ、から、実際に動かせるまでが長かったのでメモ。
環境
pyenv
は anyenv
経由でインストール。
brew
で python-tk
をインストールするのが早いらしいが、pyenv で複数バージョン使えるようにしてる意味... て話なので。。
version | |
---|---|
Machine | M2 Macbook pro |
OS | macOS Ventura 13.0.1 |
pyenv | pyenv 2.3.6-15-g13d85686 |
python | 3.11.0 |
結論: うまくいったやり方
% brew install tcl-tk
...
% export TCLTK_LIBS="-L/opt/homebrew/opt/tcl-tk/lib -ltcl8.6 -ltk8.6"
% export TCLTK_CFLAGS="-I/opt/homebrew/opt/tcl-tk/include"
% pyenv install 3.11.0
python-build: use openssl@1.1 from homebrew
python-build: use readline from homebrew
Downloading Python-3.11.0.tar.xz...
-> https://www.python.org/ftp/python/3.11.0/Python-3.11.0.tar.xz
Installing Python-3.11.0...
python-build: use tcl-tk from homebrew
python-build: use readline from homebrew
python-build: use zlib from xcode sdk
Installed Python-3.11.0 to /Users/seiro/.anyenv/envs/pyenv/versions/3.11.0
これで無事 tkinter
を使った GUI アプリが立ち上がった。
pyenv の Issue に載ってた。
python3.11 では pkgconfig の --with-tcl-tk-*
サポートはなくなっちゃったらしい?
うまくいかなかったやり方
ぐぐって出てきた、 Qiita や Zenn の記事のやり方(以下のように LDFLAGS/CPPFLAGS/PKG_CONFIG_PATH/PYTHON_CONFIGURE_OPTS 環境変数を設定する方法)はどれもうまくいかなかった。。
export PATH="/opt/homebrew/opt/tcl-tk/bin:$PATH"
export LDFLAGS="-L/opt/homebrew/opt/tcl-tk/lib"
export CPPFLAGS="-I/opt/homebrew/opt/tcl-tk/include"
export PKG_CONFIG_PATH="/opt/homebrew/opt/tcl-tk/lib/pkgconfig"
export PYTHON_CONFIGURE_OPTS="--with-tcltk-includes='-I/opt/homebrew/opt/tcl-tk/include' --with-tcltk-libs='-L/opt/homebrew/opt/tcl-tk/lib -ltcl8.6 -ltk8.6'"
もちろんそれらの記事が悪いわけではなく、python 3.11 での変更が理由なのだろう。おとなしく 3.10.x を使っておくべきだったが、対応中はそんなことわからんかったんや。。。
上記 Issue の PR を見た感じでは、これらをうまく動かせるように修正しててそれが pyenv 2.3.6 に入ってるように見えたんだけど、どうして動かなかったのかまでは未確認。
あるいは 2.3.7 なら正しくインストールできたのかな?