PyScript:讓Python在HTML中執行

程式猿DD發表於2022-05-10

大家好,我是DD,已經是封閉在家的第51天了!

最近一直在更新Java新特性IDEA Tips兩個專欄,其他方向內容的動態關注少了。昨天天晚上刷推的時候,瞄到了這個神奇的東西,覺得挺cool的,拿出來分享下:

相信你看到圖,不用我說,你也猜到是啥了吧?html裡可以跑python程式碼了

看到好多Python公眾號已經開始猛吹未來了,但乍看怎麼覺得有點像JSP?或者一些模版引擎?是進步還是倒退呢?與其瞎想,不如仔細看看這個東東的能力吧!

根據官方介紹,這個名為PyScript的框架,其核心目標是為開發者提供在標準HTML中嵌入Python程式碼的能力,使用 Python呼叫JavaScript函式庫,並以此實現利用Python建立Web應用的功能。

看到介紹裡提到了呼叫JavaScript函式庫的能力,看來跟JSP或者模版引擎還是有區別的。

PyScript 快速體驗

官方給了一個例子,可以幫助我們觀的感受這個開發框架的能力,不妨跟著DD看看,它能做啥吧!

第一個案例,hello world

程式碼很簡單,就下面這幾行。你只需要建立一個html檔案,然後複製進去就可以了。

<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>

儲存好之後,在瀏覽器裡開啟就能看到這樣的頁面了:

回頭再看看這個html裡的內容,三個核心內容:

  • 引入pyscript的樣式檔案:<link rel="stylesheet" href="https://pyscript.net/alpha/pyscript.css" />
  • 引入pyscript的指令碼檔案:<script defer src="https://pyscript.net/alpha/pyscript.js"></script>
  • <py-script>標籤中寫具體的python程式碼來輸出Hello World

如果你懶得自己敲程式碼的話,本文的兩個案例程式碼我打包放在公眾號了,需要的朋友可以關注公眾號“程式猿DD”,回覆:pyscript 獲取。

第二個案例,資料定義 + 資料展示

先建立一個data.py檔案,然後加入前面的程式碼。功能很簡單,就是隨機生成(x,y)的座標

import numpy as np

def make_x_and_y(n):
    x = np.random.randn(n)
    y = np.random.randn(n)
    return x, y

再建立一個html檔案,加入下面的程式碼

<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
        - paths:
          - /data.py
      </py-env>
    </head>

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

    x, y = make_x_and_y(n=1000)

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

這裡就稍微複雜一些了,除了hello world中的幾個要點外,這裡還有這幾個要關注的地方:

  • <py-env>標籤:這裡宣告要引入的包和要引入的檔案(上面建立的data.py
  • <py-script output="plot">:這裡定義了要在<div id="plot"></div>中輸出的內容,可以看到這裡的邏輯都是用python寫的

這個頁面的執行效果是這樣的:

是不是很神奇呢?整個過程中都沒有大家熟悉的cs、js內容,就完成了這樣一個圖的頁面實現。

小結

最後,談談在整個嘗試過程中,給我的幾個感受:

  1. 開發體驗上高度統一,對於python開發者來說,開發Web應用的門檻可以更低了
  2. 感覺效能上似乎有所不足,幾個複雜的案例執行有點慢,開始以為是部分國外cdn的緣故,後來移到本地後,還是慢。這部分可能還需要進一步優化。

這個開發框架目前還只是alpha版本,未來一定還會有更多特性與優化出來,總體上我覺得這個框架還是非常cool的,尤其對於剛學會Python,或者只會Python,但又想快速開發Web應用的小夥伴來說,可能將會是個不錯的選擇,那你覺得這個框架如何?未來會不會火?留言區聊聊吧!

本文的兩個案例程式碼我打包放在公眾號了,需要的朋友可以關注公眾號“程式猿DD”,回覆:pyscript 獲取。

歡迎關注我的公眾號:程式猿DD。第一時間瞭解前沿行業訊息、分享深度技術乾貨、獲取優質學習資源

相關文章