Simon Willison · 博客

通过 Pyodide + service worker 在浏览器中运行 Python ASGI 应用

Running Python ASGI apps in the browser via Pyodide + a service worker

二〇二六年五月三十日 · 英文原文

通过 Pyodide 与 Service Worker 技术,Datasette Lite 实现了在浏览器中直接运行 Python ASGI 应用。早期版本使用 Web Worker 拦截导航操作,但无法执行 `<script>` 标签中的 JavaScript,限制了 Datasette 功能与插件。开发者使用 Claude Opus 4.8 在 Claude Code for web 中研究 Service Worker 替代方案,成功运行了基础 ASGI FastCGI 演示与 Datasette 1.0a31 演示,计划升级 Datasette Lite。

研究:通过 Pyodide + Service Worker 在浏览器中运行 Python ASGI 应用

Datasette Lite 是我开发的 Datasette 浏览器版本,它完全在浏览器中运行,底层使用 WebAssembly 上的 Pyodide。四年前我首次构建它时,使用了 Web Worker 和拦截导航操作的代码,通过运行 Python 应用来获取生成的 HTML。这种方法虽然可行,但缺点是 <script> 标签中的任何 JavaScript 都不会被执行——这破坏了一些 Datasette 功能以及大量 Datasette 插件。

今天早上,我给 Claude Opus 4.8 布置了一个任务(在 Claude Code for web 中):研究如何使用 Service Worker 替代方案,在 Pyodide 中运行 Python ASGI 应用。结果似乎成功了!这里有一个基础的 ASGI FastCGI 演示,还有一个运行 Datasette 1.0a31 的演示。我还在逐步理解它的具体工作原理,但一旦弄明白,我就计划升级 Datasette Lite 本身。

标签:javascript, python, datasette, asgi, service-workers, pyodide, datasette-lite, claude-code

译自 Simon Willison · 博客 · 录于 二〇二六年五月三十日