文字化けするなーと思ってFontインストールして…ってやりますが、その度にググって修正してもなかなか日本語表示出来ないのでメモ。
結論
要は下記です。
- フォントをインストールする。
- matplotlibの設定ファイルを修正する。
.cache/matplotlib/fontlist-v330.json
ファイルを削除する。- 上記を行った上でkernelを再起動する。
私は何を思ったかkernelを再起動せずに反映されると思い込んでいて日本語表示されない!と焦ることがちょこちょこある。たまにしかJupyterを触らないので忘れるんですよね…。
今回を機にその辺を意識しなくても問題無く日本語表示されるようにDockerfile、composeファイルを作成しました。
今回はtensorflow-notebookのイメージを使用しています。
最初にapt-getでフォント(fonts-ipaexfont)をインストールしています。
最後にmatplotlibの設定ファイルを書き換えています。使用している環境によってファイルの所在が異なる可能性があるのでご注意ください。
FROM jupyter/tensorflow-notebook:tensorflow-2.6.2
USER root
# requirements install
RUN apt-get update && \
apt-get install -y fonts-ipaexfont
# clean
RUN apt-get clean && \
rm -rf /var/lib/apt/lists/*
USER jovyan
# font setting
RUN sed -i "s/^#font\.family.*/font.family: IPAexGothic/g" /opt/conda/lib/python3.9/site-packages/matplotlib/mpl-data/matplotlibrc
composeファイルではcommand箇所でキャッシュファイルである.cache/matplotlib/fontlist-v330.json
を削除した後にJupyterを起動しています。
version: '3.7'
services:
notebook:
container_name: notebook
build:
context: .
dockerfile: ./Dockerfile
ports:
- 8888:8888
environment:
- JUPYTER_ENABLE_LAB=yes
restart: unless-stopped
tty: true
command: >
bash -c "
rm .cache/matplotlib/fontlist-v330.json &&
start-notebook.sh --NotebookApp.token=""
"
volumes:
- type: bind
source: ./app
target: /home/jovyan/work
上記ファイル設定後にcompose build / upを行えば一発で表示されるはずです。
$ docker-compose build
$ docker-compose up -d
一発で表示されなかったらごめんなさい。