【PyScript】PythonをHTMLに埋め込む

PyScriptなるものが登場したようです。

PyScriptとは

GitHubのREADMEに書いてあることをGoogle翻訳にかけてみます。

PyScriptは、Scratch、JSFiddle、またはその他の「使いやすい」プログラミングフレームワークのPythonの代替手段であり、誰もが興味深くインタラクティブなアプリケーションを作成できる、フレンドリーでハッキング可能な場所になります。

https://github.com/pyscript/pyscript

よく分からないですが、HTMLにPythonコードを埋め込めるものだと理解しました。

コンテンツを作成してみる

こちらのサンプルソースに基づいて、PyScriptのコンテンツを作成してみます。

まずは、お約束のHelloWorldです。

実際に配置したページはココ

<html>
  <head>
    <link rel="stylesheet" href="https://pyscript.net/alpha/pyscript.css" />
    <script defer src="https://pyscript.net/alpha/pyscript.js"></script>
  </head>
  <body> <py-script> print('Hello, World!') </py-script> </body>
</html>

続いて、datetimeライブラリや関数の使用です。

実際に配置したページはココ

<html>
    <head>
      <link rel="stylesheet" href="https://pyscript.net/alpha/pyscript.css" />
      <script defer src="https://pyscript.net/alpha/pyscript.js"></script>
      <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet" crossorigin="anonymous">
    </head>

  <body>
    <b><p>Today is <u><label id='today'></label></u></p></b>
    <br>
    <div id="pi" class="alert alert-primary"></div>
    <py-script>
import datetime as dt
pyscript.write('today', dt.date.today().strftime('%A %B %d, %Y'))

def wallis(n):
    pi = 2
    for i in range(1,n):
        pi *= 4 * i ** 2 / (4 * i ** 2 - 1)
    return pi

pi = wallis(100000)
pyscript.write('pi', f'π is approximately {pi:.3f}')
    </py-script>
  </body>
</html>

最後に、matplotlibを用いての図の描画です。

実際に配置したページはココ

<html>
    <head>
      <link rel="stylesheet" href="https://pyscript.net/alpha/pyscript.css" />
      <script defer src="https://pyscript.net/alpha/pyscript.js"></script>
      <py-env>
        - numpy
        - matplotlib
      </py-env>
    </head>

  <body>
    <h1>Let's plot random numbers</h1>
    <div id="plot"></div>
    <py-script output="plot">
import matplotlib.pyplot as plt
import numpy as np

x = np.random.randn(1000)
y = np.random.randn(1000)

fig, ax = plt.subplots()
ax.scatter(x, y)
fig
    </py-script>
  </body>
</html>

最後に

アクセスしてみると分かると思いますが、PyScriptの処理時間がとても長いです。

今の状態だと、私は使おうとは思いません(フロントをPyScriptで実装するのが主流になるかも?と少し期待したのですが)。。

どんな場面で使うのか、今の私には想像が及ばないのですが、これからの動きをウォッチしていこうと思います。