CentOS7.2のpyenv上python3.5.2環境でtkinterを利用する方法
pandasからグラフを表示させようとしたところ、ちょっと躓いたのでそのメモです。環境は件名のものです。
plot関数を呼び出したところ、'_tkinter'がないよと怒られました。
>>> import pandas as pd >>> import numpy as np >>> import matplotlib.pyplot as plt >>> df = pd.DataFrame(np.random.randn(500,2), columns=['a', 'b']) >>> df.cumsum().plot() (中略) import _tkinter # If this fails your Python may not be configured for Tk ImportError: No module named '_tkinter'
tkinterとは、PythonでGUIを操作する場合に必要となるライブラリで、その名の通りtkのinterfaceです。スクリプト言語 Tcl とGUIツールキット Tk からなる 「Tcl/Tk 」は、かなり古くからあるGUIスクリプティングツールで、これらはCentOSに最初からインストールされていることが多いです。こいつ使って画像を作ることになるので、Pythonから利用するためのinterfaceが必要ということです。
25.1. tkinter — Tcl/Tk の Python インタフェース — Python 3.5.2 ドキュメント
且つ、pyenv上の既に作成済の環境でtkinterを利用するには、既存のpython環境を再作成する必要がありました。詳しくは、下記のgithubのissueかstackoverflowに書いてあります。
Tkinter import error for pyenv Pythons · Issue #94 · yyuu/pyenv · GitHub
Python not configured for Tk - Stack Overflow
今回の環境では"tk-devel"というパッケージがインストールするそれにあたりました。"tkinter"というパッケージだと動きません。罠です。
$ sudo yum install tk-devel
前述の通り、既に作成していたpyenv上の環境を再作成してあげます。尚、必要であればインストール済みパッケージをバックアップしておきます。
[バックアップ] $ pyenv local 3.5.2 $ pyenv exec pip freeze > ~/pyp_list.txt $ pyenv exec pip wheel --wheel-dir=~/wheelhouse -r ~/pyp_list.txt [再作成] $ pyenv uninstall 3.5.2 $ pyenv install 3.5.2
tkinterを利用できることを確認します。パッケージをバックアップしている場合、移行してあげます。GNOMEデスクトップ上に空のウィンドウが表示されるはずです。
[移行] $ pyenv local 3.5.2 $ pyenv exec pip install -r ~/pyp_list.txt --use-wheel --no-index --find-links=~/wheelhouse [確認] $ python >>> import tkinter >>> root = tkinter.Tk()
ちなみに、Python2.7.5の環境では"tk-devel"のパッケージではダメで、"tkinter"というパッケージが必要でした。