Python の Web アプリ化 (Panel)

2023年6月13日

はじめに

Panel は Python コードを Web アプリ化するライブラリである。Jupyter Notebook でも使える。

バージョン

  • Windows 10 64bit
  • Python 3.11.3

インストールとサンプル実行

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

>pip install panel

アプリ例

平方根計算

sqrt.py/sqrt.ipynb

import panel as pn
pn.extension()

answer = pn.widgets.StaticText(value="")
text = pn.widgets.TextInput(name= "数値:", placeholder= "数値を入力")
button = pn.widgets.Button(name="計算")

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 calculate(event):
    try:
        a = float(text.value)
        x = sqrt(a)
        answer.value = str(x)
    except:
        pass

button.on_click(calculate)

pn.WidgetBox("# 平方根計算", text, button, answer).servable()

Web アプリとしては次のように実行。

>panel serve sqrt.py --show

あるいは

>panel serve sqrt.ipynb --show

コードで servable() としたものが表示される。

プロット

plot.py/plot.ipynb

import panel as pn
pn.extension()

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)

plot = pn.pane.Matplotlib(fig, dpi=100)

pn.WidgetBox("# プロット", plot).servable()

Web アプリ

Voilà との比較

Jupyter Notebook を Web アプリ化するツールとして Voilà があるが、Voilà は ipywidgets を使っておけばノートブックをそのままアプリにしてくれるが、Panel の場合はアプリに表示したいものを指定する感じである。Panel は ipywidgets の代わりになるが、ノートブックをそのままアプリ化したい場合は Voilà が向いていそうである。