PyScript 语言:在浏览器中直接运行 Python
I’m happy to translate the article for you, but I’ll need the full text of the post (the portions you want translated). Could you please paste the article’s content here? Once I have it, I’ll provide a Simplified‑Chinese translation while preserving the source link, formatting, markdown, and any code blocks or URLs unchanged.
什么是 PyScript?
PyScript 是一个框架,使 Python 能够在浏览器中运行,利用现代网页技术。它允许开发者编写与 DOM 交互、处理数据和渲染 UI 的 Python 代码——无需编写 JavaScript。
由 Anaconda 构建和维护,Anaconda 同时也是流行的 Python 发行版和数据科学生态系统的背后组织。
为什么 PyScript 存在
在 PyScript 之前,在网页上运行 Python 意味着:
- 编写后端 API(Flask / Django / FastAPI)
- 使用 JavaScript 框架进行前端逻辑
- 通过 API 在 Python 与 JavaScript 之间进行桥接
PyScript 通过实现 客户端 Python 执行 消除了这种分离,从而解锁了:
- 以 Python 为首的 Web 应用
- 基于浏览器的数据科学和可视化
- 教育性和交互式的 Python 内容
- 无需后端基础设施的快速原型开发
PyScript 工作原理(内部实现)
PyScript 依赖 WebAssembly(Wasm) 在浏览器中高效执行 Python。
核心组件
-
WebAssembly 运行时
- 使用 Pyodide 将 Python 编译为 WebAssembly。
- 在安全的浏览器沙箱中运行。
-
Pyodide
- 为 Web 编译的 Python 发行版。
- 包含 NumPy、Pandas、Matplotlib 等库。
-
HTML 集成
- 自定义 HTML 标签(
<py-script>、<py-config>)实现 Python 执行。 - Python 可以直接操作 DOM 元素。
- 自定义 HTML 标签(
基本 PyScript 示例
最小化 HTML + Python
print("Hello from Python running in the browser!")
无需构建工具。无需后端。无需 JavaScript。
使用 Python 访问 DOM
Submit
from js import document
def greet(event):
name = document.getElementById("name").value
document.getElementById("output").innerText = f"Hello, {name}"
document.getElementById("btn").addEventListener("click", greet)
这与 JavaScript 的 DOM 操作相同,只是全部使用 Python 编写。
在 PyScript 中安装 Python 包
packages = ["numpy", "pandas"]
import numpy as np
import pandas as pd
print(np.array([1, 2, 3]) * 10)
多亏了 Pyodide,许多科学库开箱即用。
浏览器中的数据科学
PyScript 最强的优势之一是 客户端数据科学。
Pandas 示例
import pandas as pd
data = {
"Language": ["Python", "JavaScript", "Rust"],
"Popularity": [95, 90, 70]
}
df = pd.DataFrame(data)
df
完全在浏览器中运行——无需服务器,也无需 API 调用。
PyScript vs. JavaScript
| Feature | PyScript | JavaScript |
|---|---|---|
| Language | Python | JavaScript |
| Browser‑native | 是 | 是 |
| Performance | 中等 | 高 |
| Ecosystem | 科学、机器学习 | Web优先 |
| Learning Curve | 对 Python 开发者友好 | 标准 Web 技术栈 |
PyScript 不是 JavaScript 的替代品,而是一个补充工具。
常见使用场景
-
教育与学习
- 交互式 Python 教程
- 浏览器中的实时编码笔记本
-
数据可视化
- 基于浏览器的分析仪表板
- 轻量级数据探索工具
-
原型设计
- 快速 UI + 逻辑实验
- 概念验证应用
-
科学出版
- Web 文档中的可重复研究
PyScript 的局限性
虽然功能强大,PyScript 仍有一些限制:
- 执行速度慢于 原生 JavaScript
- 初始加载体积大(Pyodide 运行时)
- 对系统资源的访问受限
不适用于:
- 高性能游戏
- 实时应用
- 大规模生产前端(暂时)
PyScript 在生产环境中:它准备好了吗?
PyScript 对于特定用例具备生产能力,尤其是:
- 内部工具
- 教育平台
- 数据驱动的界面
然而,对于大型消费类应用,JavaScript 框架仍然占主导地位,因为其性能和生态系统的成熟度更高。
PyScript的未来
路线图包括:
- 更小的运行时捆绑包
- 更好的性能优化
- 与 Web 标准的更深度集成
- 与 JavaScript 框架的改进互操作性
随着 WebAssembly 的持续演进,浏览器中的 Python 将变得越来越可行。
何时应使用 PyScript?
使用 PyScript 的情况:
- 你以 Python 为首选语言
- 你希望在浏览器中进行数据处理
- 你正在构建交互式的教育或分析工具
- 你希望后端复杂度最小化
避免使用的情况:
- 需要超低延迟
- 正在构建大规模的面向消费者的网页应用
- 严重依赖仅有 JavaScript 的库
最后思考
PyScript 通过消除对 JavaScript 的严格依赖来实现浏览器逻辑,代表了 Web 开发的 范式转变。它以直接、原生且富有表现力的方式向 Python 开发者敞开了 Web 大门。虽然它并非 JavaScript 的通用替代品,但它为以 Python 为中心的项目提供了一个有吸引力的选项,尤其是那些侧重于教育、数据科学和快速原型制作的项目。
取代 JavaScript,但它极大地扩展了在 Web 上使用 Python 的可能性。