PyScript:浏览器中的 Python

您是主要使用 Python 的数据科学家或开发者吗?您是否羡慕那些编写 Javascript 代码并在浏览器中构建精美网站的开发者?如果我们能用 Python 编写网站,那该多好?令人惊叹的是,在 PyCon US 2022 大会上,Anaconda 的 CEO Peter Wang 宣布了一项名为 PyScript 的闪亮新技术,该技术允许用户在浏览器中编写 Python,实际上还可以编写多种语言。 

什么是 PyScript? 

PyScript 由 Anaconda 团队(包括 Peter Wang、Fabio Pliger 和 Philipp Rudiger)开发,PyScript 正如 Peter 在演讲中提到的,PyScript 是“一个在 HTML 中交织 Python 的系统(类似于 PHP)”。这意味着您可以在 HTML 中编写和运行 Python 代码,在 PyScript 中调用 Javascript 库,并使用 Python 完成所有 Web 开发。听起来很棒! 

对于世界和数据科学家来说,使用 PyScript 意味着什么?

  • 最明显的是,借助 PyScript,我们现在可以使用 Python(以及潜在的其他语言)在 HTML 中编写代码并构建 Web 应用程序。PyScript 使 Python 的强大功能能够为更广泛的前端开发者和创作者所用。 
  • 正如 Peter 在演讲中提到的,“Web 浏览器是世界上最普及、最便携的计算机环境。” 确实,几乎每个人都可以访问 Web 浏览器,无论是在电脑上还是在手机上。这意味着任何人都可以访问并开始编程,而没有任何基础设施障碍。 
  • 借助 PyScript,我们不再需要担心部署。PyScript 提供了“超越云的架构转变”。一切都将在您的 Web 浏览器中发生。作为数据科学家,我们可以在 HTML 文件中共享我们的仪表板和模型,每当其他人在 Web 浏览器中打开该文件时,这些文件将运行代码。 

图 1. PyScript 概述。 

PyScript 背后的魔力是什么?

PyScript 目前构建在 Pyodide 之上,Pyodide 是“CPython 到 WebAssembly/Emscripten 的端口”。PyScript 支持在浏览器中编写和运行 Python 代码,并且未来将提供对其他语言的支持。 

图 2. PyScript 技术栈。 

什么是 WebAssembly?

使使用 Python 编写网站成为可能的基础技术是 WebAssembly。当最初开发 WebAssembly 时,Web 浏览器仅支持 Javascript。 

WebAssembly 于 2017 年首次发布,并于 2019 年迅速成为官方万维网联盟 (W3C) 标准。它包括一种人类可读的 .wat 文本格式语言,然后将其转换为浏览器可以运行的二进制 .wasm 格式。这使我们能够使用任何语言编写代码,将其编译为 WebAssembly,然后在 Web 浏览器中运行。 

如何使用 PyScript

PyScript 的 alpha 版本可以在 pyscript.net 上找到。代码可在 https://github.com/pyscript 获取。请按照 这些说明 进行尝试。PyScript 允许您使用以下三个主要组件在 HTML 中编写 Python

  • py-env 定义运行 Python 代码所需的 Python 包。 
  • py-script 是您编写 Python 代码的地方,这些代码将在网页中执行。
  • py-repl 创建一个 REPL(读取-求值-打印循环)组件,用于评估用户输入的代码并显示结果。

py-env 示例

这是一个关于如何在 HTML 中使用 py-env 定义 Python 环境的示例。在 此示例 中,我们将 bokeh、numpy、pandas 和 scikit-learn 包加载到我们的环境中。 

py-script 示例

此示例演示了一个带有流数据的 Panel 仪表板。如您在代码中看到的,我们能够在 py-script 中编写我们熟悉的 Python 代码,就像我们在 Python 文件中通常做的那样。如果您不喜欢直接在 py-script 下编写 Python 代码,您也可以使用 Python 文件作为源代码,如下所示: 

来源:https://github.com/pyscript/pyscript/blob/main/pyscriptjs/examples/panel_stream.html

py-repl 示例

此示例演示了一个使用 DeckGL 和 REPL 组件的 Panel 仪表板,其中包含 NYC 出租车数据。如您所见,我们能够在 REPL 中定义半径并选择数据框的子集(hour<3)。多么神奇! 

来源:https://github.com/pyscript/pyscript/blob/main/pyscriptjs/examples/panel_deckgl.html

您还可以在 PyScript Github 页面 上找到许多其他示例,包括 D3 可视化和带有计算机视觉的 Mario 游戏。 

PyScript 的未来

PyScript 将 Python 带入浏览器。我对这项新创新感到非常兴奋,迫不及待地想看看它在社区中如何发展。敬请期待即将推出的许多精彩新功能! 

参考

https://github.com/anaconda/pyscript

主题演讲,Peter Wang 在 PyCon US 2022

关于作者
Sophia Yang

Anaconda

Sophia Yang 是 Anaconda, Inc. 的高级数据科学家,她在该公司利用数据科学来促进各个部门的决策。她自愿担任 NumFOCUS 的项目孵化器,以帮助开源科学项目发展。她还是多个 Python 开源库的作者,例如 condastats、cranlogs、PyPowerUp、intake-stripe 和 intake-salesforce。她拥有德克萨斯大学奥斯汀分校的统计学硕士学位和教育心理学博士学位。