6
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Macのpyenv環境でTkinterが使えない時の対処法

Posted at

開発環境を一新したら、プロジェクトが動かなくなった件

以前、以下の記事を投稿しました。

投稿後、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が起動する事が確認できます。

皆さんももし同じ状況になった場合は試してみてください。

参考

6
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?