Pythonで _tkinter がないと言われる件
pyenv でインストールしたPythonで tkinter をインポートして実行すると _tkinterないよ的なエラーが出た。他にも最近 Manjaro Linux KDE をインストールしていじっているが、そちらのPythonでも同様だった。
tkinter は matplotlib で使われているので結構大事ですよね。
解決策が分かったので残しておきます。
tkinter があるか確認
一行のコマンドで確認できる。コマンドとエラーを以下に。
~$ python2 -m Tkinter
Traceback (most recent call last): File "/usr/lib/python2.7/runpy.py", line 174, in _run_module_as_main "__main__", fname, loader, pkg_name) File "/usr/lib/python2.7/runpy.py", line 72, in _run_code exec code in run_globals File "/usr/lib/python2.7/lib-tk/Tkinter.py", line 39, inimport _tkinter # If this fails your Python may not be configured for Tk ImportError: libtk8.6.so: cannot open shared object file: No such file or directory
~$ python3 -m tkinter
Traceback (most recent call last): File "/usr/lib/python3.7/runpy.py", line 183, in _run_module_as_main mod_name, mod_spec, code = _get_module_details(mod_name, _Error) File "/usr/lib/python3.7/runpy.py", line 142, in _get_module_details return _get_module_details(pkg_main_name, error) File "/usr/lib/python3.7/runpy.py", line 109, in _get_module_details __import__(pkg_name) File "/usr/lib/python3.7/tkinter/__init__.py", line 36, inimport _tkinter # If this fails your Python may not be configured for Tk ImportError: libtk8.6.so: cannot open shared object file: No such file or directory
上記のようなコメントが出たら _tkinter がない。
以下のようなウィンドウが表示されれば _tkinter ある。
tkinter がなかった場合
ここからは tkinter がなかった場合にする作業です。
TK をインストールする
使っているディストーションに合わせて実行してください。
~$ sudo apt-get install tk-dev
~$ sudo yum install tk-devel
~$ sudo pacman -S tk
パッケージ名が若干違う。
pyenv 経由のPythonでなければ、この時点で使えるようになっているはず。
Pythonの再インストール
pyenv でPythonをインストールしている場合はPythonを再インストールする必要があった。
Manjaro Linux に元から入っているPythonの場合は必要なかったのでコンパイルの関係だろうか。
pip で色々とライブラリをインストールしていると、あとから戻すのが大変なので書き出しておきます。
~$ pip freeze > piplist2.txt
~$ pip3 freeze > piplist3.txt
pyenv の Python アンインストール
~$ pyenv uninstall <pythonのバージョン>
pyenv の Python インストール
~$ pyenv install <pythonのバージョン>
pyenv に Python を指定しておく。
~$ pyenv global <python2のバージョン> <python3のバージョン>
先程書き出したもの(piplist.txt)を読み込んで、ライブラリをインストールします。
~$ pip install --requirement ./piplist2.txt
~$ pip3 install --requirement ./piplist3.txt
最後に確認
多分問題なくTKのウィンドウが表示されるはずです。が、確認。
~$ python2 -m Tkinter
~$ python3 -m tkinter
ウィンドウが表示されればオッケーです。
おわりに
Linux の系統によってパッケージ名が若干違って混乱するので、整理するために書きました。
何かの参考になれば幸いです。