matplotlib.pyplotをインポートしようとしたらtkinterがなくてエラーになった

pythonimport matpliotlib.pyplot を実行したらModuleNotFoundError: No module named 'tkinter'と言われたので、tkinterをインストールした話。

環境

OS : Windows 8.1 (64bit)

> python --version
# Python 3.7.4

import matplotlib
print(matplotlib.__version__)
# 3.1.1

ライブラリのインストールはpipを使っている。

発生事象

PowerShell上で pythonと打って対話モード(インタラクティブモード)で起動した。

Python 3.7.4 (tags/v3.7.4:e09359112e, Jul  8 2019, 19:29:22) [MSC v.1916 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>> import matplotlib # これは正常にインポートできる
>>> import matplotlib.pyplot
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Users\[Username]\AppData\Local\Programs\Python\Python37-32\lib\site-packages\matplotlib\pyplot.py", line 2355, in <module>
    switch_backend(rcParams["backend"])
  File "C:\Users\[Username]\AppData\Local\Programs\Python\Python37-32\lib\site-packages\matplotlib\pyplot.py", line 221, in switch_backend
    backend_mod = importlib.import_module(backend_name)
  File "C:\Users\[Username]\AppData\Local\Programs\Python\Python37-32\lib\importlib\__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "C:\Users\[Username]\AppData\Local\Programs\Python\Python37-32\lib\site-packages\matplotlib\backends\backend_tkagg.py", line 1, in <module>
    from . import _backend_tk
  File "C:\Users\[Username]\AppData\Local\Programs\Python\Python37-32\lib\site-packages\matplotlib\backends\_backend_tk.py",line 6, in <module>
    import tkinter as tk
ModuleNotFoundError: No module named 'tkinter'

tkinterというモジュールをインポートしようとしたけど見つからない、と言っている。 対話モードを抜けてインストールしようとしたけど

> pip install tkinter
Collecting tkinter
  Could not find a version that satisfies the requirement tkinter (from versions: )
No matching distribution found for tkinter

あれ。インストールできない。 適当に検索したら、「tkinter」の代わりに「python-tk」とか「python3-tk」を入れれば良さそうだったので試したけど、同じエラーになってしまう。

対処法

待てよ……tkinterってpythonをインストールするときに同時にインストールしてた気がする。
pythonインストーラー(python-3.7.4.exe)を起動して、「Modify」を選択する。

f:id:soratokimitonoaidani:20190831230415p:plain

あー。やっぱり、「tck/tk and IDLE (Installs tkinter and the IDLE develop environment.)」の項目にチェックが入ってなかった。
デフォルトだと「インストールする」のチェックが確か入ってたはずなので、このエラーに遭遇するのは自分でチェックを外した場合だけだ。
インストールの時、「このパソコンではそんなにpythonを使わないだろうから、小さめの構成にしよう」と考えたのだった。
tcl/tkなんて昔の言語じゃんと思ったし、tkinterpythonGUIを作成するときに使う)を使う予定もないかなと思ってチェックを外してしまった。まさかmatplotlibの内部で使っているとは思わなかったよ。

tck/tk and IDLE」にチェックを入れて「Next」に進みそのままインストールした。
PowerShellの再起動もせず、そのままもう一度pythonの対話モードに入ってimport matpliotlib.pyplot を実行したら、エラーが出ず無事に実行できた。

それでは。