最近看到 Anaconda 開發了一個新的 Open source project 叫做 PyScript,是一個能在 HTML 中直接撰寫 Python 程式,當使用者開啟該檔案時,就會在背後直接開始執行 Python
感覺運用場景可以很廣,像是直接進行資料視覺化、產出 Dashboard,或是利用爬蟲直接顯示有興趣的網頁的結果
這個專案的核心是靠 Pyodide,跟之前我介紹過的 Jupyter Lite 一樣,還沒看過的可以複習一下
此篇文章主要是做一些 PyScript 的實測,並記錄試用的過程與感想
1. 不管怎樣都要先來個 Hello world
程式碼
網頁呈現結果
個人感想
- 開網頁直到顯示出 Hello World 之間,會有明顯有感的延遲時間
2. 來點簡單的數學計算
程式碼
網頁呈現結果

個人感想
- 還是很慢,看起來延遲時間是難以避免的了
- 發現沒辦法進行程式碼格式上的排版,若把 python 往後 indent 縮排,就會出現 error,對於我這種排版狂人看了是有點刺眼啊(笑
3. 讓 Python 與 HTML Tags 溝通
利用
pyscript.write()
這個方法來將計算結果傳入指定的id
tag 中
程式碼
網頁呈現結果

個人感想
- 這部分終於開始有種「哦~好像有點實用!」的感覺出現了
- 感覺這功能可以用在比較多的場合
4. 試著呈現「視覺化圖表」
程式碼
網頁呈現結果

個人感想
- 嗯…跑有點久
- 需要使用
<py-env>
來指名需要另外 import 進來的 Python Library (如上方程式碼) - 另外也可以匯入
.whl
檔案,範例如下
<py-env>
- './travertino-0.1.3-py3-none-any.whl'
</py-env>
- 如果沒有你想要的,也可以去 Pyodide Github 提出 PR 或 issue
- 目前已有的套件清單 pyodide packages
—
5. 匯入自己定義的 py 檔
程式碼
網頁呈現結果

個人感想
- 這個範例在自己本機上測試時會無法執行,因為在 web server 上會有找不到該檔案的問題
- 解決方法是
- 先使用
python3 -m http.server
開啟一個 Local Server - 前往 http://localhost:8000/
- 於畫面中點選開啟 HTML 檔就可以看到順利執行的圖了
- 先使用
個人總感想
等待時間過長
- 在測試的過程,一直困擾我的就是執行速度
- 雖然說這樣開網頁很方便,但這個等待的時間總覺得不是網頁該有的狀況…
可能需要更貼心的提示
- 另一個問題是,在執行時可能還是需要一個「執行中」之類的提示,不然等待的時候都不知道程式是已經掛了還是還沒跑出來
- 在發生 Error 時如果能直接顯示在畫面上更好,現在的情況就需要另外寫
print
或是try
去抓錯誤
Dubug 上的優化
- 因為 PyScript 是在 HTML 中寫 Python,所以就算我用 VSCode 編輯,也很難做 debug
- 在 HTML 中不會有 python syntax highlight,也沒辦法套用
.py
相關的 extensions - 考量到這個問題,若要開發的話我可能會先在別的
檔裡面先編輯好,再利用.py
<py-env>
去匯入寫好的 method/functions 可能會比較方便
其他有趣應用
1. 直接匯入 py 檔並執行
<py-script src="./test.py"></py-script>
2. 互動式 Python
<py-repl id="my-py-repl" auto-generate="true"></py-repl>
- 類似 Jupyter notebook 功能,如下圖
- 其中
auto-generate="true"
時,按下 shift enter 執行時會自動產生下一行新的 cell

3. 瑪利歐 Mario(是網頁遊戲!)
- 沒想到 PyScript 真的可以做出這麽酷的成品 XD
- 程式碼和相關檔案都在官方的 repo example 裡面 https://github.com/pyscript/pyscript/tree/main/examples/mario
- 把官方的 repo clone 到自己的本機,打開
play_mario.html
就可以馬上開玩!

- 想看試玩影片的在這裡
總結
- 目前個人覺得 PyScript 可能還僅限於個人專案使用,或是公司內部分享程式碼的成果的時候使用,感覺還有點難運用到產品上
- 現階段 Python 的 Web Application 可能還是要選擇像是 Django 或 Flask 之類的網頁框架,畢竟網頁的使用者不太可能願意等待過長的執行時間
- 但我是滿期待之後有沒有什麼新的應用出現,PyScript 整體來說還算是滿新穎也滿有前景的一個專案!