首頁 > 軟體

基於python詳解PyScript到底是什麼

2022-06-13 22:00:41

前言:

最近 Anaconda 開大會發布了 PyScript ,它允許我們將 Python 程式碼嵌入到 HTML 中,並在瀏覽器中允許。PyScript 旨在為使用者提供一流的程式語言,該語言具有一致的樣式規則、更具表現力且更易於學習。

熟悉前端的朋友應該馬上就可以反應到:這就是替代 JavaScript 啊!

確實,這個功能就類似於 JavaScript,如果後面發展得好的話,我們完全可以不寫 JavaScript,直接寫 Python 也能實現一樣的效果。

這個專案出來之後,馬上躥升到 GitHub 趨勢榜榜首,短短20天已經有 10K+ 的 star 了,可見其熱度之高。

我們不知道 anaconda 有沒有這個野心,但是 PyScript 的出現,確實是一件振奮人心的事情,意味著你會 Python 的話,再加上前端知識,就可以寫出漂亮的前端頁面了。對於 Pythoner 來說,我們可以用 Python 和 HTML前端知識做全棧工程師了。

作用

PyScript 核心特性:

  • Python in the browser:啟用 drop-in content、外部檔案託管(基於 Pyodide 專案),以及不依賴伺服器端設定的應用程式託管。
  • Python 生態:提供流行的 Python 和科學計算軟體包(例如 numpy, pandas, scikit-learn 等)。
  • Python with JavaScript:在 Python 和 JavaScript 物件和名稱空間之間進行雙向通訊。
  • 環境管理:開發者可定義要引入哪些包和檔案,以便頁面程式碼的執行。
  • 視覺化應用開發:開發者可使用現成的 UI 元件,如按鈕、容器、文字方塊等。
  • 靈活的框架:開發者可以利用它在 Python 中直接建立和分享新的可插拔和可延伸的元件。

PyScript 目標:

  • 提供乾淨簡單的 API。
  • 支援標準 HTML。
  • 擴充套件 HTML 以讀取穩定且可靠的自定義元件。
  • 提供可插拔、可延伸的元件系統。

使用方法

下面,我們來體驗一下這個新生事物吧!

我們可以使用 CDN 來安裝 PyScript:

<link rel="stylesheet" href="https://pyscript.net/alpha/pyscript.css" rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  />
<script defer src="https://pyscript.net/alpha/pyscript.js"></script>

接著,我們來看看一個簡單的頁面:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <!-- 引入 PyScript -->
    <link rel="stylesheet" href="https://pyscript.net/alpha/pyscript.css" rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  />
    <script defer src="https://pyscript.net/alpha/pyscript.js"></script>
    <title>First PyScript Application</title>
    <style>
        py-script {
            width: 100%;
            height: 100%;
            font-size: 20px;
            text-align: center;
            position: absolute;
        }
    </style>
</head>
<body>
    <py-script>
        print('Hello PyScript!')
    </py-script>
</body>
</html>

執行這個程式,你就可以在瀏覽器頁面上看到這個結果了:

這就是我們著名的Hello式問候!

這段前端程式碼裡面,我們直接使用py-script標籤包裹 Python 程式碼,就實現前端指令碼控制功能了。

我這裡是在 vscode 裡面執行的,執行程式碼之前需要安裝Live Server這個外掛,然後就可以直接瀏覽器存取了。

我們再來看一個複雜一點的例子:

<html>
    <head>
      <link rel="stylesheet" href="https://pyscript.net/alpha/pyscript.css" rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  />
      <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="external nofollow"  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 compute_pi(n):
            pi = 2
            for i in range(1,n):
                pi *= 4 * i ** 2 / (4 * i ** 2 - 1)
            return pi

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

這個例子中,我們使用<py-script>標籤,在裡面提供.write()方法,將字串寫到頁面的標籤中。

執行這段程式碼,我們會看到瀏覽器頁面的結果:

我們還可以在頁面中引入 Python 的包,來實現一些簡便的操作。

<html>
    <head>
      <link rel="stylesheet" href="https://pyscript.net/alpha/pyscript.css" rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  />
      <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>

在這裡,我們參照了numpymatplotlib這兩個包,參照包是在<head>標籤內部通過<py-env>標籤來實現。

執行這個程式,我的頁面始終處於載入狀態:

現階段,執行帶有 PyScript 的頁面載入速度還是有點感人的,好像一下子回到了原始年代。所以,想要被大家廣泛使用還有很長的路要走。

目前階段,我們還只能繼續等待,想要嚐鮮的話,可以在去 GitHub 上看看。在公眾號後臺留言PyScript獲取專案的 GitHub 地址。

總結

專案現在還在完善階段,許多功能還沒有支援,但是從其熱度和參與貢獻的人數來看,前途還是光明的,畢竟 Python 有著這麼多的應用基礎,學會 Python 就可以寫前端, Python 的那些便捷操作庫都可以在頁面直接使用的話,會大大提高大家的效率,我們也不用去學習現在越來越複雜的那一套前端技術了。

到此這篇關於基於python詳解PyScript到底是什麼的文章就介紹到這了,更多相關python PyScript內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com