Marimo, 不是马里奥, 是 球藻
官方资料见下面:
- marimo-team/marimo
- marimo docs 文档和教程
- Recipes - marimo 通用提示
- cookbook/examples at main · marimo-team/cookbook 还真有 cookbook
本地 python 环境下最简单的运行方式:
pip install marimo
# 安装后查看它的简要教程
marimo tutorial intro
# 新建一个notebook 默认在 http://127.0.0.1:2718/
marimo edit luigli.py
特点:
1 响应式 (Reactive) 更新: 变量更改后, 自动执行所有受其影响的后续单元格
- 看着眼熟呀, 感觉像是
useState
v-model
… - 但列表
.append()
不能驱动响应式更新, 例如:my_list = [1]; my_list.append(2)
是不能触发响应式更新的my_list = [1]; my_list = [1, 2]
<= 写成这样, 就行了- 这个写法就像是 Updating arrays and objects • Svelte Tutorial
2 无隐藏状态
- 官方介绍: 像 Jupyter 这样的传统笔记本具有隐藏状态,运行单元格可能会更改全局变量的值,但这些更改不会传播到使用它们的单元格。更糟糕是,删除单元格会从可见代码中删除全局变量,但不会从程序内存中删除全局变量,这是 bug 的常见来源
3 界面和侧栏功能符合 UI 潮流, 还直接集成了 GPT
4 可以切换 cell 模式 (编写) 或 app 模式
- app 模式里, 有个支持拖放组件的 Grid layout
- 网格布局能拖动排版, 就比手写布局快多了, 适合发简单小应用给朋友
5 文件存为 .py 格式
- 这比 jupyter 的 .ipynb (.json) 格式更方便版本控制
- 似乎并不存储 cell 执行结果, 可能主要用于轻量级计算场合
- 官方支持导入 jupyter notebook
6 可部署到浏览器运行
- 文档见 WASM notebooks - marimo
- 官方 gallery 见 marimo.io/@public
- 原理可能是利用 Pyodide 库 (python 以及常见科学计算库移植到 JavaScript, 在浏览器中直接执行)
感觉还挺有意思的, 大家感兴趣可以试试