WSL+pyenv環境でtkinterモジュールを使うときに詰まったこと
環境
OS:Ubuntu 18.04.4 LTS (Bionic Beaver) (WSL)
Python:3.8.2
pyenv: 1.2.17-2-ga8ca63fc
最初に起こったこと:tkinterモジュールが見つからない
(venv) yukyan@Yukyan-PC:~/workspace/project/python/drawing_chat$ python3 -m tkinter
Traceback (most recent call last):
File "/mnt/d/linux_home/.pyenv/versions/3.8.2/lib/python3.8/runpy.py", line 184, in _run_module_as_main
mod_name, mod_spec, code = _get_module_details(mod_name, _Error)
File "/mnt/d/linux_home/.pyenv/versions/3.8.2/lib/python3.8/runpy.py", line 143, in _get_module_details
return _get_module_details(pkg_main_name, error)
File "/mnt/d/linux_home/.pyenv/versions/3.8.2/lib/python3.8/runpy.py", line 110, in _get_module_details
__import__(pkg_name)
File "/mnt/d/linux_home/.pyenv/versions/3.8.2/lib/python3.8/tkinter/__init__.py", line 36, in <module>
import _tkinter # If this fails your Python may not be configured for Tk
ModuleNotFoundError: No module named '_tkinter'
tkinterモジュールが見つからないと出る。
これはpyenvでPythonをインストールする際に tk-dev が無いのが原因なので、tk-devをインストールした上で再度インストールする。
$ pyenv uninstall インストールしたいPython
$ sudo apt install tk-dev
$ pyenv install インストールしたいPython
これで実行が出来るようになる。
次に起こったこと:ウィンドウ上の日本語が文字化けする
「テスト」というラベルを表示させるプログラム(上記)を書いたが、実際に実行すると以下のように表示されてしまう。
これはUbuntu上に日本語が表示できるフォントが入っていないことが原因である。Windows10とWSL上のフォントは同期されていないのだ。
fc-listコマンドでWSL上にインストールされているフォント一覧を確認できる。
Windows10のフォントをWSL上で使えるようにするには 、/etc/fonts/local.conf というファイルを作成し、以下のように書き込む。ルートユーザーでしか書き込めないので、sudoを使う。
<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
<dir>/mnt/c/Windows/Fonts</dir>
</fontconfig>
こうすることによって、Windows10上のフォント(C:\Windows\Fonts)も読み込まれるようになり、再度プログラムを実行すると
日本語が表示されるようになった。
参考:
https://github.com/pyenv/pyenv/issues/94
https://www.atmarkit.co.jp/ait/articles/1812/27/news033.html