サイトアイコン てくてくぷれいす

macOS(Mojave)でNo module named ‘_tkinter’を解決する(pyenv , Python3.x)

こんにちは,しまさん(@shimasan0x00)です.

pyenv:Python3.6.0でtkinterをimportとしようとするとエラーが出てしまいます.

ImportError: No module named '_tkinter’

tk.h version (8.6) doesn't match libtk.a version (8.5)

 

私はここで大変困ったのでその解決方法を紹介したいと思います.

結局pyenvのPythonをインストールしなおすことで解決しました.

環境

macOS Mojave(10.14)

pyenv Python3.6.0

スポンサーリンク

解決方法

まずはpyenvのPythonをアンインストールします.

ですがその前にpipでインストールしたものをバックアップしときます.

pip freeze > pip.txt

ただpipでscikit-learnをインストールしている場合はScipyが依存しているのでpip.txt内でScipyが先にくるようにしておいてください(アルファベット順ではscikit-learnが先に来てしまう).

ではPythonをアンインストールします.

pyenv uninstall python3.6.0

 

また,/Library/FrameworksにあるTcl.framework,Tk.frameworkも削除しましょう.

Download and install Tcl with ActiveTcl, the precompiled, supported Tcl distribution. ActiveTcl Community Edition is free to use in development.
Download and Install Tcl: ActiveTcl | ActiveState – ActiveState

ActiveTclのサイトから赤枠部分の8.5.18をインストールしましょう.

もしHomebrewでtcl-tkをインストールされているのであればアンインストールしておいてください.

ではもう一度pyenvでインストールします.

私の場合はpython3.6.7にしました.

CFLAGS="-I$(brew --prefix readline)/include -I$(brew --prefix openssl)/include -I$(xcrun --show-sdk-path)/usr/include" \
LDFLAGS="-L$(brew --prefix readline)/lib -L$(brew --prefix openssl)/lib" \
PYTHON_CONFIGURE_OPTS=--enable-unicode=ucs2 \
pyenv install -v 3.6.7
pyenv global python3.6.7

あとは.bash_profileに以下の設定を追加します

export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"

REPLでimport tkinterをすると…

エラーが出ない!!!!やりました!!

pipのインストールをするのは

pip install -r pip.txt

スポンサーリンク

さいごに

今回はtkinterのインポートができないエラーの対処方法について紹介しました.

tkinter使えないのは致命傷だったので解決できてよかったです.

よいPythonライフを!!!

[入門]Python初心者が圧倒的成長するために使うサービス,本Python初心者向けの本,Webサービスについて網羅的に紹介をしています.Pythonの勉強で私が実際に使用した本です.入門書をさらに細分化し,学ぶならどのレベルがいいのかわかりやすくしています....

参考

macOS Mojave に pyenv install 3.6.6 でPython3系をインストールしようとしたらエラーが発生した。
pyenv install 3.6.6 でエラーが発生する。 – Medium
普段コードを書くときはjupyterを使っていて、matplotlibのプロットがブラウザ内に行われるの為この問題には気付かなかった。改めてpythonのコードを書いてみて描画関連でエラーが出ていることに気が付いた。 環境 何が起こったか 解決方法 確認 原因 参考 環境 Ubuntu16.02 python 3.5.1 (pyenv) matplotlib 1.5.2 何が起こったか 最初はmatplotlibで描画するコードであるplt.show()としてもウンともスンとも言わなかった。で探しているうちにmatplotlibのbackendにTkを指定しないと描画が行われないとの情報があっ…
matplotlibが描画されない – DISTRICT 37 – DISTRICT 37
モバイルバージョンを終了