阿里、蚂蚁、晟腾、中科加禾精彩分享 AI 基础设施洞见,现购票可享受 9 折优惠 |AICon 了解详情
写点什么

PyScript:让 Python 脚本在 Web 中跑起来

  • 2022-05-20
  • 本文字数:2422 字

    阅读完需:约 8 分钟

PyScript:让 Python 脚本在 Web 中跑起来

这是下一个大事件吗?如果继续发展下去,有可能。

 

在 2022 年 PyCon 美国大会期间,作为主题演讲嘉宾之一的 Peter Wang 公布了 PyScript,一种在 HTML 中直接编写 Python 脚本的方法。或许你不知道 Peter,但你可能听说过 Anaconda,这是一种流行的开源的 Python 和 R 语言的发行版本,特别关注数据科学。Peter 正是 Anaconda 的 CEO 和联合创始人。

 

换言之,PyScript 是由一家著名的科技公司开发的,这可能会保证它在不久的将来成为可行的方案。它在 Python 和 Web 开发者中受到了极大的关注,GitHub 上已有超过 10k 颗 Stars。然而,它是否能成为一个成功的、有竞争力的产品,取决于长期的时间和开发投入。目前,它还有一些已知的缺陷(将在最后讨论)。

 

闲话少说,让我们快速了解一下这个令人振奋的产品吧!

py-script 标签

我们知道,HTML 文件是大多数网站最常见的元素。在创建网站时,我们的工作就是直接或间接地通过一些框架来编制 HTML 文件。在典型的 HTML 文件中,你会看到各种类型的标签。例如,<head>定义了 HTML 页面的元数据和关键信息,<title>是整个文档的标题,而<h1><h2>等定义了不同级别的内容标题。

 

如前所述,PyScript 允许你在 HTML 中编写 Python 脚本,它使用一个特殊的标签py-script。在这个标签中,你可以嵌入 Python 脚本。要了解它是如何工作的,可以创建一个 HTML 文件,其中包含以下代码,并使用 Chrome 浏览器打开该文件。在 Chrome 浏览器中,你应该能够看到类似下面这样的内容:



作者截图

 

在上面的代码片段中,你可能已经注意到以下三个关键点:

  • link标签定义了一个外部样式表。在这个例子中,我们使用了 PyScript 提供的css文件。

  • 我们使用script标签来嵌入一个由src定义、由 PyScript 托管的外部脚本。我们使用了defer,这样脚本会在下载和页面解析完成后执行——本质上是一种延迟执行,而不是实时执行。

  • 最有趣的部分是py-script标签。如你所见,print("Hello, World!")是 Python 代码。当执行 HTML 文件时,就可以看到代码求值结果。

 

这很酷,不是吗?如果你不熟悉 Web 开发,但了解 Python,就可以使用 PyScript 嵌入任何有效的 Python 代码。让我们再看一个例子。



另一个 PyScript 示例(图片由作者提供)

 

在这里,我们写了一些需要计算的代码,可以看到,脚本得到了正确的执行。

py-env 标签

在编写更复杂的代码时,就需要使用第三方库。在这种情况下,我们可以利用py-env标签。你可能已经猜到的,env 是 environment 的缩写。py-env标签中列出了运行代码所需的 Python 包。

 

你可能知道,许多数据科学家都使用 pandas 进行数据处理工作。让我们看看下面的例子。



使用包的 PyScript(图片由作者提供)

 

如你所见,我们在py-env标签中指定了依赖项(即 Pandas),该标签包含在head标签中。如果页面需要多个依赖项,可以在这里把它们全部列出:

 

<py-env>  - pandas  - matplotlib  - numpy</py-env>
复制代码

如你所见,在py-script标签中,我们确实可以使用 Pandas 库来创建一个DataFrame对象。然而,当我们把打印出来时就会发现,它是一个单行,而不是一个结构化的数据表。没有一个适当的结构,我们就无法理解这些数据。幸运的是,我们可以使用write函数(下文会讨论)。

将内容写入指定标签

除了 Python 中的标准打印函数print,作为脚本的一部分,PyScript 有自己的write函数,可以将数据发送到页面上指定的 Web 元素中。请看下面的例子:



PyScript 写函数 write(图片由作者提供)

 

与之前的例子相比,上述代码片段有两个重大变化:

  • 我们现在定义了一个 id 为"DataFrame"div,这样稍后就可以引用。

  • py-script标签中,我们创建一个与之前相同的DataFrame对象。但现在,我们不是调用print,而是调用pyscript.write函数,请求 PyScript 处理并在"DataFrame"中显示DataFrame对象。从输出可以看到,我们现在有一个结构化的表格了。

 

write函数不仅能够打印表格,还能够打印数字。下面的例子向你展示了我们如何使用matplotlib(一个流行的 Python 包,用于数据可视化)来显示由 Python 创建的图。



PyScript 打印图(图片由作者提供)

 

如你所见,write 函数以期望的方式显示了图。

py-repl 标签


Python 学习的最好方法之一是使用 REPL:读取(Read)、求值(Evaluate)、打印(Print)和循环(Loop)。也就是说,使用一个交互式的 Python 控制台,输入一些代码,Python 对其进行求值并打印适当的输出,然后重复这个过程。Web 页面也可以提供这样的 REPL 环境,比如 Jupyter Notebook。

 

PyScript 可以使用py-repl标签提供与此类似的东西。在这个元素中,你可以让用户自己编写代码,也可以以编程方式输入代码。请看下面的例子:



PyScript REPL(图片由作者提供)

 

如你所见,上图中有一个单元格,其中包括在py-repl标签中指定的代码。值得注意的是,单元格中的代码可以引用我们之前在py-script标签中定义的变量。一切看起来都很协调。

感想


本文介绍的内容是现阶段 PyScript 所能提供的主要亮点。它似乎是一个很有前途的产品,因为它提供了一个灵活的框架,让 Python 程序员可以在没有太多 Web 开发知识的情况下创建 Web 应用。然而,也有其他类似的成功的产品,因此,竞争会很激烈。

 

例如,如果我需要为自己的数据科学项目创建一个 Web 应用,我就会直接使用 Streamlit。它的功能已经相对成熟。请注意,虽然都与 Web 开发有关,但 PyScript 和 Streamlit 属于不同的产品系。PyScript 应该更通用,因为它的目标是让你可以在任何网页上嵌入任何 Python 代码,Streamlit 做不到这一点。

 

在 PyScript 为更多的人所接受之前,它有几个问题必须解决。例如,Web 页面的加载速度非常慢。如果你尝试跟随本教程运行代码,可能就会注意到,在 Web 页面的显示会有一个明显的滞后。

 

尽管如此,我还是觉得这个产品会继续发展,我的信心主要来自于它的开发者——给我们带来极好的 Anaconda 工具的 Anaconda 团队。


本文最初发布于 Better Programming。


查看英文原文:Running Python Scripts on the Web Using PyScript

2022-05-20 17:0612490

评论 1 条评论

发布
用户头像
web就是香,各路神仙都有
2022-05-24 07:03
回复
没有更多了
发现更多内容

财务共享中心搭建以后,如何进行精细化管理?

用友BIP

财务共享

开源数据库迎来技术创新拐点|2023开放原子全球开源峰会开源数据库分论坛即将启幕

开放原子开源基金会

数据库 开源 开放原子

开源教育与人才|2023开放原子全球开源峰会开源教育和人才分论坛即将启幕

开放原子开源基金会

开源 开放原子 教育与人才

企业出海,全球合并有高招!

用友BIP

中企出海

为什么 AIGC 和大模型创业者都在安利向量数据库?

Zilliz

Milvus AIGC 向量数据库 zillizcloud

2023数字政府高质量发展论坛在京召开

信通院IOMM数字化转型团队

数字化转型 数字政府 IOMM 政府数字化转型

聊点技术 | 可观测性十问十答

博睿数据

可观测性 智能运维 博睿数据 发展趋势 聊点技术

SDK轻量化,降低日均耗电量和日均流量

MobTech袤博科技

恒参信道特性及其对信号传输的影响

timerring

信息论

Authing 结合 APISIX 实现统一可配置 API 权限网关(快速启动版)

Authing

API APISIX APISIX 网关 API 接口

项目汇报的正确打开方式

老张

汇报 向上管理

1 行代码开启「密钥检测」,给敏感数据加上防护锁

极狐GitLab

DevOps 安全 DevSecOps 安全左移 密钥检测

瑞云科技CTO赵志杰出席广州广告数字创意峰会并发表演讲

3DCAT实时渲染

元宇宙 实时云渲染 云3D渲染

单卡轻松打造 ChatGPT 竞争者“原驼”,QLoRA 革新大语言模型微调技术

Zilliz

openai AIGC Towhee ChatGPT

wireshark分析tcp传输之文件上传速率问题

蓝胖子的编程梦

TCP 网络 Wireshark tcpdump 抓包

启用Windows防火墙后,FTP传输非常慢

镭速

Web3 游戏的用户留存的挑战与机遇:从经济模型与游戏设计谈起

Footprint Analytics

区块链游戏 web3 web3游戏

轻松掌握,板对板连接器选型指南

元器件秋姐

电路 元器件 PCB 连接器 PCB设计

软件测试/测试开发丨接口测试实战学习笔记

测试人

程序员 软件测试 自动化测试 接口测试 测试开发

通义千问预体验,如何让 AI 模型应用“奔跑”在函数计算上?

阿里巴巴云原生

阿里云 云原生 函数计算

嘉为蓝鲸荣登广东软件风云榜,获评新技术应用最受欢迎产品TOP10

嘉为蓝鲸

软件 新技术 应用程序

信道的数学模型

timerring

信息论

ChatGPT应用助推跨境电商发展,低代码凭啥不行?!

加入高科技仿生人

低代码 跨境电商 ChatGPT JNPF

悦数图数据库:图 + AI 在金融行业的应用及技术前瞻

悦数图数据库

AI 金融 图数据库实战

WICC · 出海嘉年华倒计时!精彩不容错过,「指南」一手掌握

融云 RongCloud

社交 融云 泛娱乐 出海 wicc

推动科技教育普惠|2023开放原子全球开源峰会校源行分论坛即将启幕

开放原子开源基金会

开源 开放原子全球开源峰会 开放原子

活动回顾丨首期阿里云 Serverless 技术创新实战营上海开讲(含 PPT 下载)

阿里巴巴云原生

阿里云 Serverless 云原生

9秒被骗245万元?AI火了,骗子也来了!

引迈信息

AI 低代码 JNPF AI诈骗

多数据中心助力中企出海全球化经营

用友BIP

中企出海

解读科学计算助力行业高质量发展|2023开放原子全球开源峰会科学智能分论坛即将启幕

开放原子开源基金会

人工智能 开源 开放原子 科学智能

展望开源产业与数字经济未来|2023开放原子全球开源峰会开源创新理论与实践分论坛即将启幕

开放原子开源基金会

开源 开放原子

PyScript:让 Python 脚本在 Web 中跑起来_大前端_Yong Cui_InfoQ精选文章