2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Jupyter NotebookのSnippetを作成してライブラリのimportを楽にする試み(Jupyter @ Dockerでの方法)

Last updated at Posted at 2022-03-29

:warning: 以下の方法は最新のJupyterでは実行できなくなってしまっています.(Jupyter バージョン 4.9.2)

日頃からJupyter Notebookを活用しています。GPU搭載マシーン(Linux)上でDockerを実行してJupyter Notebook(Tensor Flow Notebook)のコンテナを立てて利用しています。Notebook利用時にimportするライブラリはいつも似通っており、毎度毎度記載するのが煩雑であり、面倒くさい行程と感じていました。そこで、Notebookのテンプレート(Snippet)を設定して、import文の記載を楽にする試みをやってみることにしました。Jupyterにインターフェースが似ているGoogle Colaboratoryには設定メニューからSnippetの設定が可能ですが、Jupyterには専用のextensionをインストールする必要が有ります。本記事ではJupyter @ Docker環境を対象にしています。筆者が設定時に情報を探しましたが、Jupyter @ Dockerの情報は見つかりませんでした。。。 :scream: 同様の環境構築を考えておられている方のお役に立てれば幸いです。

Jupyter Nbextensions Configuratorのインストール

まずJupyter Nbextensions Configuratorをインストールします。筆者はpipコマンドでインストールを実施しました。

pip install jupyter_nbextensions_configurator

pipインストール完了後にjupyterコマンドを用いて有効化するために、以下のコマンドを実行します。

jupyter contrib nbextension install --user

コンテナの再起動

Jupyterを実行しているコンテナの再起動を行います。利用しているコンテナ仮想化環境に合ったコマンドを実行して下さい。

Dockerの場合
docker container restart <CONTAINER_NAME>
Docker Composeの場合
docker-compose restart <CONTAINER_NAME>

Snippetsの有効化

コンテナ再起動後に、JupyterのURL(<base_url>/tree例えばhttp://<ServerIP>:8080/tree)にアクセスすると下図の様にNbextensionsタブが追加1されています。タブをクリックしてページを表示します。

tab.png

Nbextensionsの有効化

disable configuration for nbextensions without explicit compatibility (they may break your notebook environment, but can be useful to show for nbextension development)のチェックボックスを下図の様にオフにます。また、Snippetsのチェックボックスをオンにして有効化します。

config

Snippetsが有効化されていることの確認

新規Notebookを作成してSnippetsが有効化されているか確認します。下図の赤丸の部分に示すドロップダウンメニューが表示されていれば成功です。これでsnippetは使える様になりましたが、このままではサンプルsnippetしか利用出来ません。(因みにサンプルsnippetはZen of Pythonを表示させるimport thisコマンドが記載されているだけです。)

notebook

自作snippetの登録

自作snippetを登録する場合、.local/share/jupyter/nbextensions/snippets/snippets.jsonに登録したい内容を追記します。筆者はPyTorchの専門書を読みながらNotebookを利用する時に大量にimport文を書きたくないので、必要なライブラリを直ぐにimport出来る状態にしておくためのsnippetを登録しました。

snippetの例
{
    "snippets" : [
        {
            "name" : "example",
            "code" : [
                "# This is an example snippet!",
                "# To create your own, add a new snippet block to the",
                "# snippets.json file in your jupyter nbextensions directory:",
                "# /nbextensions/snippets/snippets.json",
                "import this"
            ]
        },
        {
            "name" : "PyTorch NoteBook",
            "code" : [
                "import xml.etree.ElementTree as ET",
                "import glob",
                "import json",
                "import os.path as osp",
                "import random",
                "",
                "import cv2",
                "import numpy as np",
                "import matplotlib.pyplot as plt",
                "import torch",
                "import torch.nn as nn",
                "import torch.optim as optim",
                "import torch.utils.data as data",
                "import torchvision",
                "",
                "from PIL import Image",
                "from tqdm import tqdm",
                "from torchvision import models, transforms",
                "",
                "%matplotlib inline",
                "",
                "torch.manual_seed(1234)",
                "np.random.seed(1234)",
                "random.seed(1234)"
            ]
        }
    ]
}

まとめ

以前から気になっていたJupyter Notebookのsnippet登録が漸く出来ました。今後よく使うNotebookはテンプレート化して直ぐに利用出来る様に活用していこうと思います。

Reference

  1. Web上の情報や公式docでは<base_url>/nbextensionsでアクセスすると表示される旨の説明が記載されていますが、筆者の環境では上手くアクセス出来ませんでした。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?