最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

網(wǎng)絡(luò)瀏覽器中運(yùn)行Python腳本PyScript剖析

 更新時間:2022年08月01日 10:53:09   作者:DebugUsery  
這篇文章主要為大家介紹了網(wǎng)絡(luò)瀏覽器中運(yùn)行Python腳本PyScript剖析詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

正文

PyScript可以讓你在瀏覽器中直接運(yùn)行Python腳本,與JavaScript并排,在你的代碼和網(wǎng)頁之間進(jìn)行雙向互動。

由Anaconda創(chuàng)建的PyScript是一項實(shí)驗性的但很有前途的新技術(shù),它使Python運(yùn)行時在支持WebAssembly的瀏覽器中作為一種腳本語言使用。

每個現(xiàn)代常用的瀏覽器現(xiàn)在都支持WebAssembly,這是許多語言(如C、C++和Rust)可以編譯的高速運(yùn)行時標(biāo)準(zhǔn)。Python的參考實(shí)現(xiàn)是用C語言編寫的,一個早期項目Pyodide提供了Python運(yùn)行時的WebAssembly移植。

也在InfoWorld上:WebAssembly的崛起

不過,PyScript的目標(biāo)是提供一個完整的瀏覽器環(huán)境,將Python作為一種網(wǎng)絡(luò)腳本語言運(yùn)行。它建立在Pyodide之上,但增加或加強(qiáng)了一些功能,如從標(biāo)準(zhǔn)庫中導(dǎo)入模塊、使用第三方導(dǎo)入、配置與文檔對象模型(DOM)的雙向交互,以及做許多其他在Python和JavaScript世界中有用的事情。

現(xiàn)在,PyScript仍然是一個原型和實(shí)驗性項目。Anaconda 并不推薦在生產(chǎn)中使用它。但好奇的用戶可以在PyScript網(wǎng)站上嘗試一些例子,并使用可用的組件在瀏覽器中構(gòu)建實(shí)驗性的Python+JavaScript應(yīng)用程序。

在這篇文章中,我們將參觀一下PyScript的基礎(chǔ)知識,看看它是如何讓Python和JavaScript進(jìn)行交互的。

使用PyScript編程

PyScript的核心是一個單一的JavaScript include,你可以將其添加到網(wǎng)頁中。這個 include 加載了基本的 PyScript 運(yùn)行時間,并自動添加了對 PyScript 中使用的自定義標(biāo)簽的支持。

下面是一個PyScript的 "hello, world "項目的簡單例子。

<!DOCTYPE html>
<html>
    <head>
        <link rel="stylesheet"  rel="external nofollow"  rel="external nofollow"  />
        <script defer src="https://pyscript.net/unstable/pyscript.js"></script>
    </head>
    <body>
<py-script output="out">
print("Hello world")
</py-script>
<div id="out"></div>
    </body>
</html>

head 文檔中的script 標(biāo)簽加載了PyScript的核心功能。pyscript.css 樣式表是可選的,但很有用。在其他方面,它在頁面加載時向用戶插入了關(guān)于頁面正在做什么的通知--加載Python運(yùn)行時,初始化,等等。

Python代碼被包含在自定義的py-script 標(biāo)簽中。請注意,代碼應(yīng)該按照Python的縮進(jìn)慣例進(jìn)行格式化,否則將無法正常運(yùn)行。如果你使用的編輯器能自動重新格式化HTML,請注意這一點(diǎn);它可能會弄亂py-script 塊的內(nèi)容,使其無法運(yùn)行。

一旦PyScript組件加載完畢,任何Python代碼都會被評估。如果標(biāo)簽中的腳本寫到stdout (如print) 語句中,你可以通過提供一個output 屬性來指示在頁面的什么地方顯示輸出。在這個例子中,腳本的stdout 被引導(dǎo)到ID為"out"div

如果你把它保存到一個文件中,并在網(wǎng)絡(luò)瀏覽器中打開它,你會首先看到一個 "加載 "指示器和一個暫停,因為瀏覽器獲得了PyScript的運(yùn)行時間并將其設(shè)置好。該運(yùn)行時在未來的加載中應(yīng)保持緩存,但仍需要一些時間來激活。之后,Hello world 應(yīng)該出現(xiàn)在頁面上。

標(biāo)準(zhǔn)庫導(dǎo)入

僅僅使用Python的內(nèi)建程序的腳本只有一點(diǎn)用處。Python 的標(biāo)準(zhǔn)庫在 PyScript 中可用,就像你在常規(guī) Python 中使用它一樣:只需import 并開始工作。標(biāo)準(zhǔn)庫的導(dǎo)入在PyScript中應(yīng)該只是工作。

如果你想修改上面的腳本塊來顯示當(dāng)前的時間,你不需要用與傳統(tǒng)Python不同的方法。

import datetime
print ("Current date and time:",    datetime.datetime.now().strftime("%Y/%m/%d %H:%M:%S"))

使用來自PyPI的庫

如果我們想從PyPI中安裝一個包并使用它呢?PyScript 有另一個標(biāo)簽,py-env ,它指定了需要安裝的第三方軟件包。讓我們用這兩個塊來替換原始腳本中的py-script 塊。

<py-env>
- humanize
</py-env>
<py-script output="out">
from datetime import datetime
import humanize
now_int = int(datetime.timestamp(datetime.now()))
now_fmt = humanize.intcomma(now_int)
print("It has been", now_fmt, "seconds since the epoch.")
</py-script>

py-env 塊讓我們列出要添加的軟件包,就像我們在 Python 項目的requirements.txt 文件中列出它們一樣。然后我們可以像對待其他 Python 軟件包一樣導(dǎo)入和使用它們。在這個例子中,我們使用了一個名為humanize 的第三方軟件包,以使數(shù)字輸出更容易閱讀。

注意,并不是所有來自PyPI的包都能按預(yù)期安裝和運(yùn)行。例如,requests 需要訪問尚不支持的網(wǎng)絡(luò)組件。(這個問題的一個可能的解決方法是使用pyodide.http.pyfetch ,它被原生支持)。但是純 Python 包,如humanize ,應(yīng)該運(yùn)行良好。Anaconda 提供的例子中使用的包,如numpy,pandas,bokeh, 或matplotlib ,也可以運(yùn)行。

本地導(dǎo)入

對于另一種常見的情況,假設(shè)你想從與你的網(wǎng)頁在同一目錄樹下的其它 Python 腳本中導(dǎo)入。使用導(dǎo)入可以更容易地將更多的 Python 邏輯從網(wǎng)頁本身移出,在那里它和你的演示文稿混在一起,可能會變得難以處理。

通常,Python 使用文件系統(tǒng)中其他.py 文件的存在作為它可以導(dǎo)入的指示。PyScript 不能以這種方式工作,所以你需要指定哪些文件可以作為可導(dǎo)入模塊。

比方說,你有一個名為index.html 的網(wǎng)頁,在你的 web 服務(wù)器的某個目錄下,你想在它旁邊放置一個名為main.py 的 Python 文件。這樣,你的頁內(nèi)腳本就可以只是import main ,而你可以把大部分的 Python 邏輯限制在實(shí)際的.py 文件中。

在你的py-env 塊中指定你想導(dǎo)入的 Python 文件。

- paths:`` - ./main.py

這將允許main.py ,在與網(wǎng)頁本身相同的 web 服務(wù)器目錄下,可以與import main 一起導(dǎo)入。

要記住一件重要的事情。你不能對你在瀏覽器中本地啟動的網(wǎng)頁進(jìn)行這樣的導(dǎo)入。這是由于WebAssembly運(yùn)行時和瀏覽器本身對文件系統(tǒng)訪問的限制造成的。相反,你需要在網(wǎng)絡(luò)服務(wù)器上托管這些網(wǎng)頁,以提供網(wǎng)頁和.py 文件。

[也在InfoWorld上:在2022年編寫現(xiàn)代Python的4個關(guān)鍵]

REPL 標(biāo)簽

Python用戶應(yīng)該熟悉Jupyter Notebook,它是Python的瀏覽器內(nèi)實(shí)時編碼環(huán)境,通常用于數(shù)學(xué)和統(tǒng)計學(xué)。PyScript為這樣的環(huán)境提供了一個原始的構(gòu)建模塊,即py-repl 標(biāo)簽。

py-repl 在網(wǎng)頁上生成一個輸入字段,其功能就像一個非?;镜腏upyter筆記本環(huán)境。下面是一個來自Anaconda自己演示的例子。

<!DOCTYPE html>
<html lang="en">
  <head>
    <link rel="stylesheet"  rel="external nofollow"  rel="external nofollow"  />
    <script defer src="https://pyscript.net/alpha/pyscript.js"></script>
  </head>
  <body>
    <h1><b>pyscript REPL</b></h1>
    Tip: press Shift-ENTER to evaluate a cell
    <div>
      <py-repl id="my-repl" auto-generate="true"> </py-repl>
    </div>
  </body>
</html>

運(yùn)行這段代碼,你會看到一個輸入字段,它的工作原理類似于Python的REPL。

目前,REPL標(biāo)簽很少有記錄的自定義方式。例如,如果你想以編程方式訪問一個單元格的內(nèi)容或其結(jié)果,沒有明確的文檔說明如何做到這一點(diǎn)。

IDG

PyScript的類似Jupyter的REPL組件可以讓你在頁面中交互式地運(yùn)行Python,盡管它還不是很靈活或可配置。

與 JavaScript 事件監(jiān)聽器互動

因為 PyScript 是基于pyodide 的,所以它使用pyodide 的機(jī)制來與 DOM 交互。例如,如果我們想獲得一個網(wǎng)頁上的輸入框的值并在我們的Python代碼中使用它,我們會這樣做。

<input id="txt">
<py-script>
from js import document, console
from pyodide import create_proxy
def _eventlog(e):
    console.log(f"Input value: {e.target.value}")
eventlog = create_proxy(_eventlog)
document.getElementById("txt").addEventListener("input", eventlog)
</py-script>

js 庫為許多常見的 JavaScript 實(shí)體提供了一個 Python 接口,比如documentconsole 對象。它們在PyScript中的行為與在JavaScript中的行為幾乎完全相同。pyodide 中的create_proxy 函數(shù)可以讓我們?nèi)∫粋€ Python 函數(shù)對象并為它生成一個 JavaScript 接口,因此它可以被用作input 框的事件監(jiān)聽器。input 框中的任何按鍵都會被記錄到控制臺,但它們也可以在Python端被處理。

以上就是網(wǎng)絡(luò)瀏覽器中運(yùn)行Python腳本PyScript剖析的詳細(xì)內(nèi)容,更多關(guān)于瀏覽器運(yùn)行Python PyScript的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • python庫fire使用教程

    python庫fire使用教程

    本文主要介紹了python庫fire使用教程,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-01-01
  • python執(zhí)行CMD指令,并獲取返回的方法

    python執(zhí)行CMD指令,并獲取返回的方法

    今天小編就為大家分享一篇python執(zhí)行CMD指令,并獲取返回的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12
  • 關(guān)于Python函數(shù)參數(shù)的進(jìn)階用法

    關(guān)于Python函數(shù)參數(shù)的進(jìn)階用法

    這篇文章主要給大家分享的是Python函數(shù)參數(shù)的進(jìn)階用法,Python函數(shù)的參數(shù)根據(jù)函數(shù) 在調(diào)用時 傳參的形式分為關(guān)鍵字參數(shù)和位置參數(shù),下面文章小編就來介紹相關(guān)資料,需要的朋友可以參考一下
    2021-10-10
  • python導(dǎo)入模塊交叉引用的方法

    python導(dǎo)入模塊交叉引用的方法

    今天小編就為大家分享一篇python導(dǎo)入模塊交叉引用的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • 快速上手Python Kafka庫安裝攻略

    快速上手Python Kafka庫安裝攻略

    想要在Python中使用Kafka庫嗎?不用擔(dān)心,我們的安裝指南將幫助你快速上手,無論你是初學(xué)者還是有經(jīng)驗的開發(fā)者,這篇指南都能滿足你的需求,跟著我們一起來探索如何輕松安裝Python Kafka庫吧!
    2023-12-12
  • Python實(shí)現(xiàn)下雪效果的示例代碼

    Python實(shí)現(xiàn)下雪效果的示例代碼

    turtle是Python編程語言中的一個模塊,用于繪制圖形和圖形動畫,本文主要為大家詳細(xì)介紹了Python如何使用turtle實(shí)現(xiàn)張萬森下雪了的效果,感興趣的可以了解下
    2023-12-12
  • Flask與SMTP協(xié)議郵件擴(kuò)展問題

    Flask與SMTP協(xié)議郵件擴(kuò)展問題

    這篇文章主要介紹了Flask與SMTP協(xié)議郵件擴(kuò)展問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • python中pandas常用命令詳解

    python中pandas常用命令詳解

    pandas 是基于NumPy 的一種工具,該工具是為了解決數(shù)據(jù)分析任務(wù)而創(chuàng)建的,這篇文章主要介紹了python中pandas常用命令,需要的朋友可以參考下
    2022-07-07
  • Python中queue模塊常用函數(shù)使用方法

    Python中queue模塊常用函數(shù)使用方法

    這篇文章主要介紹了Python的Queue模塊,包括其基本概念、常用函數(shù)和用法,Queue模塊是Python標(biāo)準(zhǔn)庫中的一部分,無需額外安裝即可使用,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-11-11
  • Python基礎(chǔ)語法之變量與數(shù)據(jù)類型詳解

    Python基礎(chǔ)語法之變量與數(shù)據(jù)類型詳解

    這篇文章主要為大家詳細(xì)介紹了Python基礎(chǔ)語法中變量與數(shù)據(jù)類型的用法,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)Python有一定的幫助,感興趣的可以了解一下
    2022-07-07

最新評論

容城县| 陵川县| 五台县| 安龙县| 德惠市| 宁远县| 连云港市| 嘉定区| 盐边县| 通州市| 遂平县| 鄂托克前旗| 卓资县| 河南省| 武功县| 益阳市| 民和| 开原市| 合肥市| 赤城县| 河西区| 呼玛县| 祁连县| 珲春市| 宜昌市| 称多县| 容城县| 彰化市| 大安市| 新营市| 罗江县| 松溪县| 定襄县| 托克逊县| 绥化市| 长泰县| 固始县| 苍溪县| 德州市| 太康县| 汽车|