Pyth-on-line¶
Reactive & Interactive programming with Pyodide.
在浏览器里跑 Python,这事儿 Pyodide 早就做到了。但我想要的更多——一个真正可交互的 Python 环境,能分享代码片段,能悬停查看变量值,代码改了还能热重载。于是就有了这个项目。
promplate/pyth-on-line py3.online About
No install, just code
打开浏览器,写 Python,分享链接。NumPy、Pandas、SciPy 都能用。
What It Does¶
Pythonline 把 Pyodide(WASM 编译的 CPython)包装成一个顺手的在线 IDE:
- 实时执行代码,支持 top-level await
- 悬停变量名可以预览值(
math.pi、[1, 2, 3]这些都行) - 原生的 traceback 展示
- 可以直接
from js import navigator访问浏览器 API - 用
pyodide.http.pyfetch发网络请求
from asyncio import sleep
for i in range(10):
print(i, end=" ")
await sleep(0.1)
是的,顶层 await 直接用。
Tech Stack¶
前端用的 Svelte,搭配 UnoCSS。编辑器是 Monaco(就是 VS Code 用的那个)。代码高亮用 Shiki。
后端?其实没有传统意义上的后端——代码全在浏览器执行。但我确实做了些服务端渲染的优化,以及一个 OG 图片生成服务。
最有意思的是,这个项目里孵化出了 HMR 这个库。一开始只是想让开发体验更好(改代码不用刷新页面),后来发现这套反应式系统很好用,就独立出来了。
My Clever Bits¶
- 变量预览:解析代码里的字面量和表达式,悬停时 eval 并展示结果。看起来简单,但要处理各种边界情况
- HMR 集成:改代码时,只重新执行受影响的部分。这在 notebook 场景下特别有用——不用从头跑一遍
- llms.txt / MCP:给 AI 准备的文档格式,让 Cursor、Claude 这些工具能直接查项目文档
Features¶
- Pyodide 0.29,支持 Python 标准库和众多科学计算库
- 代码片段通过 URL hash 分享,无需后端存储
- 深色/浅色主题切换
- 移动端也能用
Related¶
- HMR:从这个项目里独立出来的热重载库
- pyodide/pyodide:WASM 版 Python,这个项目的基础
- marimo-team/marimo:另一个有趣的 reactive notebook 项目
- futurecoder:面向初学者的在线 Python 环境
Inspirations¶
这个项目深受 StackBlitz 和 CodePen 的启发——它们让前端开发变得如此便捷,我想给 Python 也做一个。