本项目是一个纯静态网页的 Python 在线运行环境,基于 Pyodide 与 Monaco 编辑器,支持:
- 离线执行(使用本地
pyodide/目录中的 WASM 与 wheel 包) - Jedi 自动补全(第三方库补全修复,支持 pandas/numpy 等)
- 自动包管理:根据
import智能安装缺失包(micropip) - 30 秒执行超时保护,运行输出展示
- 本地代码自动保存与链接分享(
?code=.../?template=...)
- 使用本地静态服务器打开项目根目录(不要直接用浏览器打开本地文件):
cd H:\Code_Files\py_playground
python -m http.server 5500或使用 NPM 脚本:
cd H:\Code_Files\py_playground
npm run start- 浏览器访问:
- 体验:
- 在编辑器内输入示例代码或选择模板,点击“运行”。
- 补全:输入点号“.”或按 Ctrl+Space 触发建议。
- Pyodide 由 Web Worker (
py-worker.js) 加载与管理,主线程不直接加载 Pyodide。 - 首次运行会加载
jedi与micropip包。 - 自动包管理:在编辑器输入时或运行前扫描
import/from ... import ...,对未加载且非标准库的模块使用pyodide.loadPackage或micropip.install安装,避免重复安装。 - 第三方库补全:放宽补全超时为 10 秒,并在安装后对导入的库进行一次预热请求,提升后续补全速度。
- 已内置 Service Worker 注册(
sw.js),用于基础缓存与离线体验(可按需调整缓存名单)。
index.html:页面与核心逻辑(Monaco 初始化、Pyodide 管理、补全、运行、分享等)templates.js:示例代码模板py-worker.js:实际使用的 Web Worker(加载 Pyodide、安装包、执行、补全)sw.js:最小化的 Service Worker(可选)pyodide/:Pyodide runtime 与常用 wheel 包(用于离线;若缺失,可改为 CDN 方案)fonts/:JetBrains Mono 等本地字体(可选)data/:示例数据集
- 由于 WebAssembly 限制,某些原生扩展或依赖系统接口的包不可用。
- 大体量库(pandas/numpy 等)首次补全可能需要 1-5 秒进行预热。
- 为安全考虑,运行时禁止
subprocess、os.system、eval/exec等。 - 若需真正的“停止/中断”,浏览器需具备 SharedArrayBuffer 可用(COOP/COEP 头),且需要在 Worker/执行端配合实现(当前回退为重启 Worker)。
- 运行代码:点击“
▶️ 运行”或 Ctrl+Enter - 格式化:暂未实现(占位)
- 分享:点击“🔗 分享”复制带 code 的链接;也可用
?template=...预置模板
- 白屏或控制台报错:打开 F12 查看 Console;资源加载失败时可检查是否存在本地
pyodide/目录。 - 包安装失败:检查包名是否正确;或确认
pyodide/目录是否包含所需包,或改为在线 CDN。 - 资源加载慢:Monaco 走 CDN,可切换到你更快的镜像源或放到本地。