Jupyter Notebook の Web アプリ化 (Voilà)

2023年6月4日

はじめに

Voilà はJupyter Notebook を Web アプリ化するライブラリである。GUI は ipwidgets を使うため、Jupyter Notebook がそのままアプリ化されるイメージで、そのために追加情報を埋め込む必要がない。

バージョン

  • Windows 10 64bit
  • Python 3.11.3

インストール

インストールは pip で行う。

>pip install voila

今回はまっさらな仮想環境を用いたので、以下のようにパッケージをインストールした。

>pip install jupyter matplotlib numpy scipy pandas ipywidgets ipympl voila

jupyterlab を入れるとパッケージのバージョンの整合性が取れなくなるようだったので、jupyterlab のインストールは避けた。

ノートブックの用意

試しに、次のようなノートブックを用意した (コード部分のみ)。

sqrt.ipynb

import ipywidgets as widgets
from IPython.display import display

answer = widgets.Label(value="")
text = widgets.Text(value="",
            placeholder="数値を入力",
            description="数値:",
            disabled=False
           )

def sqrt(a):
    if a <= 0: return 0
    x = 1.
    for i in range(10):
        x = x - (x**2 - a)/(2.*x)
    return x

def handle_text_change(change):
    try:
        a = float(change.new)
        x = sqrt(a)
        answer.value = str(x)
    except:
        pass

text.observe(handle_text_change, names="value")

display(text)
display(answer)

plot.ipynb

%matplotlib ipympl
import matplotlib.pyplot as plt
import numpy as np

fig, ax = plt.subplots()
x = np.linspace(0, 2*np.pi, 100)
y = np.sin(3*x)
ax.plot(x, y);

起動

ノートブックがある場所で、Voila を起動する。

>voila

ブラウザが起動してノートブックのリストが出る。http://localhost:8866/ に接続される。ノートブックを選ぶと起動される。URL はそれぞれ特有のものになる。

http://localhost:8866/voila/render/sqrt.ipynb?

上の URL を直接指定しても起動する。

ノートブックを直接していして起動することもできる。この場合の URL は http://localhost:8866/ になる。

ノートブック

Voila