macOS Catalina 10.15.1のpyenv環境でtkinterを利用するための設定(python 3.7.x系) | 東京都世田谷区 ホームページ制作 [k]id

macOS Catalina 10.15.1のpyenv環境でtkinterを利用するための設定(python 3.7.x系)

Category 雑記 Update 2019.11.13

twitterfacebookgoogle+はてなブックマークPocketであとで読むfeedlyで購読

1、前提

macOS Catalinaにアップグレードし、pyenv(python 3.7.4)上でtkinterを利用した所、
ImportErrorが発生し実行できませんでした。

ImportError: No module named '_tkinter’
tk.h version (8.6) doesn't match libtk.a version (8.5)

 

2、試行錯誤

下記を参考に試行錯誤したのですが、
https://murabitoleg.com/mac-tkinter/
対話型で

import tkinter as tk

はできるのですが、

root = tk.Tk()

で利用しようとするとエラー。。
 

3、対策

下記により解決
https://github.com/pyenv/pyenv/issues/1375

1、tcl-tkを導入

まずはbrewからtcl-tkを導入

$brew install tcl-tk

すると/usr/local/opt/tcl-tk/辺りに入る

2、python-buildを書き換え

tcl-tkのパスを個別に指定してあげる方法。
pyenv環境でおそらくPythonをインストール際に利用するpython-buildをエディタで編集。
(編集前にcpでバックアップをしておくと安心)

python-buildの場所

~/.pyenv/plugins/python-build/bin/python-build

私の環境だと775行目辺りに

$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

に書き換える

3、pythonをインストール

改めて

$pyenv install 3.7.4

完了後、念の為ターミナルを再起動し、

python -m tkinter

さらにpythonコマンドで対話型に移動し

import tkinter as tk
root = tk.Tk()

でエラーが出なければ成功!

私は小心者なので、python-buildを元に戻して完了!
半日悩みました。

ページトップへ
kid