marimo 是一种新型的 Python 笔记本环境,设计目标是解决传统 Jupyter Notebook 中常见的隐藏状态、执行顺序混乱和版本管理困难等问题,同时提升交互体验和团队协作效率。它采用响应式编程思想,自动管理代码执行和变量依赖,确保代码和输出始终同步,极大降低出错概率。
marimo的基础知识和核心特点
1. 响应式执行(Reactive Execution)
- 什么是响应式执行?
在 marimo 中,笔记本由多个"单元格(cells)"组成。当你运行某个单元格时,marimo 会自动找到所有依赖该单元格中变量的其他单元格,并自动运行它们,保证所有相关代码和结果保持最新。 - 好处:避免了传统 Jupyter 里因为执行顺序错误导致的变量状态混乱和结果不一致问题。
- 示例代码:
python
# 单元格1
a = 10
# 单元格2
b = a + 5 # 依赖于a
# 当你修改并运行单元格1后,单元格2会自动重新运行,b的值自动更新为15
2. 纯Python文件存储,git友好
- marimo 笔记本以
.py
纯Python文件格式保存,而非 Jupyter 的 JSON 格式。 - 这样做的好处是方便使用 Git 版本控制,能清晰看到代码差异,轻松合并和回滚。
- 你可以用任何文本编辑器打开和编辑笔记本,也可以直接运行它们作为普通 Python 脚本。
3. 无隐藏状态,保证可复现
- 传统 Jupyter 笔记本中,变量状态可能因不按顺序运行单元格而混乱,导致结果难以复现。
- marimo 通过自动追踪变量依赖,删除单元格时自动清理相关变量,避免隐藏状态。
- 这样保证每次运行笔记本都能得到相同的结果,方便团队协作和代码共享。
4. 内置SQL支持,方便数据处理
- marimo 内置了 SQL 查询引擎,可以直接用 SQL 语句查询 Pandas、Polars 数据框、数据库、CSV 文件、Google Sheets 等数据源。
- 查询结果会自动转换成 Python 数据框,方便后续分析和可视化。
- 示例:
python
# 假设 df 是一个 Pandas 数据框
# 直接用 SQL 查询 df 中 age 大于30的行
%%sql
SELECT * FROM df WHERE age > 30
5. 丰富的交互式UI组件
- 支持滑块(slider)、表格、绘图(Plotly、Altair等)、数据框GUI等交互元素。
- 这些UI元素可以绑定Python变量,用户操作时会自动触发相关单元格重新执行,无需写复杂的回调函数。
- 示例:用滑块控制变量值,动态更新绘图
python
from marimo import slider
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 100)
# 创建滑块,范围0-5,初始值1
amp = slider(0, 5, 1)
plt.plot(x, amp * np.sin(x))
plt.show()
6. 现代开发者体验
- 集成 GitHub Copilot 智能补全、代码格式化(Ruff)、调试面板、vim键绑定、变量浏览器等工具。
- 提供 VS Code 插件和命令行接口,方便开发和调试。
- 你可以像写普通 Python 脚本一样写笔记本,享受现代编辑器的便利。
7. 脚本执行与Web应用部署
- marimo 笔记本不仅能作为交互式笔记本使用,也能直接作为 Python 脚本运行。
- 还可以导出为基于 WebAssembly 的交互式 Web 应用,方便分享给他人,无需安装 Python 环境。
- 运行命令示例:
bash
# 运行笔记本作为Web应用,隐藏代码
marimo run my_notebook.py
# 直接执行笔记本脚本
python my_notebook.py
marimo适用场景与优势
- 数据科学与数据分析
快速探索和处理大规模数据,结合内置SQL和交互式表格,生成动态报表和可视化。 - 机器学习与科研原型开发
解决实验结果难以复现的问题,方便团队共享和协作。 - 教学与技术交流
通过确定性执行和交互式UI,提升教学效果,避免学生因执行顺序错误产生困惑。 - 自动化报告和交互式仪表盘
利用UI组件和Web部署,快速搭建动态数据报告和仪表盘。 - 版本控制友好
纯Python文件格式,方便团队通过Git管理代码,解决Jupyter难以合并的问题。
marimo快速入门示例
安装
bash
pip install marimo
创建和编辑笔记本
bash
marimo edit
运行笔记本作为Web应用
bash
marimo run example.py
作为脚本执行
bash
python example.py
将Jupyter Notebook转换为marimo格式
bash
marimo convert old_notebook.ipynb > new_notebook.py
总结
marimo 是一款面向现代Python开发者的响应式笔记本工具,解决了Jupyter Notebook中隐藏状态、执行顺序混乱和版本控制困难等痛点。它以纯Python文件保存,支持自动依赖追踪和执行,内置SQL查询和丰富交互组件,同时集成现代开发工具,极大提升了数据科学、机器学习、教学和数据报告的效率和体验。
欢迎尝试marimo,体验更智能、更可靠的Python笔记本开发方式!