技術的な話

【Docker + Jupyter】matplotlibの日本語表示を一発で行う設定

文字化けするなーと思って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

一発で表示されなかったらごめんなさい。

-技術的な話
-, , , , , ,