開発環境を一新したら、プロジェクトが動かなくなった件
以前、以下の記事を投稿しました。
投稿後、MacBookを買い替えたのですが、上記のじゃんけんゲームを動かそうとすると以下のエラーが出る様になりました。
_tkinter.TclError: couldn't recognize data in image file "src/file/janken.png"
また、別プロジェクトで作成しようとしてもLabelなどが表示がされない症状も出ました。
原因がわからず、まず上記の頃の環境との違いをチェックしていました。
環境の違い
項目 | 旧環境 | 新環境 |
---|---|---|
PC | MacBook Pro 2012 | MacBook Pro 2017 |
OS | catalina | monterey |
Python | 3.10 | 3.10(pyenv) |
賢い方やPythonを使い慣れている方には、わかるかもしれませんが新環境ではpyenvとpipenv環境で3.10を入れておりました。
そこで、pyenv Tkinter 使えない
などで調べた所一発で対処法を見つけました。
対処法
以下の方法を取る事で想定された動きをする様になりました。
pyenv環境化のpythonの削除
まずは、pyenvで入れたpythonを一度削除します。
# 一旦システムのPythonに切り替え
$ pyenv global system
$ pyenv versions
* system
3.X.X (set by /Users/myname/.pyenv/version)
# 3.X.Xになっていないことを確認したらアンインストール
$ pyenv uninstall 3.X.X
tcl-tkのインストール
次にtcl-tkをbrewを使ってインストールします。
brew install tcl-tk
すると以下の様なログが出ます。
(略)
==> tcl-tk
tcl-tk is keg-only, which means it was not symlinked into /usr/local,
because macOS already provides this software and installing another version in
parallel can cause all kinds of trouble.
If you need to have tcl-tk first in your PATH run:
echo 'export PATH="/usr/local/opt/tcl-tk/bin:$PATH"' >> /Users/<username>/.bash_profile
For compilers to find tcl-tk you may need to set:
export LDFLAGS="-L/usr/local/opt/tcl-tk/lib"
export CPPFLAGS="-I/usr/local/opt/tcl-tk/include"
For pkg-config to find tcl-tk you may need to set:
export PKG_CONFIG_PATH="/usr/local/opt/tcl-tk/lib/pkgconfig"
tcl-tkの設定
参考にした記事では.bash_profile
に書く様になっていますが、私は.zshrc
に記載しました。
$ vim ~/.zshrc
# 以下の内容を追記
export PATH="/usr/local/opt/tcl-tk/bin:$PATH"
export LDFLAGS="-L/usr/local/opt/tcl-tk/lib"
export CPPFLAGS="-I/usr/local/opt/tcl-tk/include"
export PKG_CONFIG_PATH="/usr/local/opt/tcl-tk/lib/pkgconfig"
記入後に以下のコマンドを入力します。
$ source ~/.zshrc
pyenvを使用してpythonの再インストール
先程削除したpythonを再インストールします。
$ PYTHON_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'" pyenv install 3.X.X
※こちらのオプションの説明や、オプションをつける理由については参考にした記事を読んでください。
ここまで作業をした後プロジェクトを起動すると、きちんと最初に書いたエラーが出ないでGUIが起動する事が確認できます。
皆さんももし同じ状況になった場合は試してみてください。
参考