跳至正文

marimo:响应式 Python Notebook

marimo - reactive Python notebook

marimo 是一款开源响应式 Python Notebook:当你运行单元格或与 UI 元素交互时,marimo 会自动运行依赖单元格(或将其标记为陈旧),从而保持代码和输出的一致性,并在错误发生前将其拦截。每个 marimo notebook 都以纯 Python 格式存储(对 Git 友好),既可以作为脚本执行,也可以部署为应用程序;虽然存储为 Python 文件,但 marimo notebooks 也原生支持 SQL。

从零构建

marimo 是从零构建的,旨在解决传统 Notebook 中众所周知的问题。

通过我们的免费在线 notebook molab 立即开始。或者使用您喜欢的包管理器在本地安装 marimo

pip install marimo && marimo tutorial intro
uv add marimo && uv run marimo tutorial intro
conda install -c conda-forge marimo && marimo tutorial intro

开发者体验是 marimo 的核心,我们强调可重复性、可维护性、可组合性和可共享性。

亮点

响应式编程环境

marimo 保证您的 Notebook 代码、输出和程序状态是一致的。这解决了传统 Notebook(如 Jupyter)中常见的许多问题。

响应式编程环境。 运行一个单元格,marimo 会通过自动运行引用了该变量的单元格来作出响应,从而消除了手动重新运行单元格这种易出错的任务。删除一个单元格,marimo 会从程序内存中清理其变量,从而消除隐藏状态。

兼容耗时任务。 marimo 允许您配置运行时为懒加载模式,将受影响的单元格标记为“陈旧”而不是自动运行它们。这既保证了程序状态的确定性,又防止了意外执行耗时的单元格。

同步 UI 元素。 与各种 UI 元素交互,如滑块、下拉菜单、数据帧转换器和聊天界面,使用这些元素的单元格将自动以最新值重新运行。

交互式数据帧。 无需编写代码,即可闪电般地分页、搜索、过滤和排序数百万行数据。

利用具备数据感知能力的 AI 生成单元格。 通过 marimo pair 使用 Claude Code、Codex 或 OpenCode 等您喜爱的智能体协作开发 marimo notebook。或者,使用marimo 编辑器中的 AI 助手生成代码,它针对数据处理进行了深度优化,并具备内存中变量的上下文感知能力。您可以自定义系统提示词、使用自己的 API 密钥或运行本地模型。

使用 SQL 查询数据。 构建依赖于 Python 值的 SQL 查询,并使用我们的内置 SQL 引擎在数据帧、数据库、数据湖、CSV、Google Sheets 或任何其他源上执行,执行结果将返回为 Python 数据帧。

SQL cell in marimo querying a dataframe

即使使用了 SQL,您的 Notebook 依然是纯 Python 代码。

动态 Markdown。 使用由 Python 变量参数化的 Markdown,讲述依赖于 Python 数据的动态故事。

内置包管理。 marimo 内置支持所有主流包管理器,允许您在导入时安装包。marimo 甚至可以在 Notebook 文件中序列化包依赖项,并自动在隔离的 venv 沙盒中安装它们。

确定性执行顺序。 Notebook 按照变量引用顺序执行,而不是根据单元格在页面上的位置。您可以按照最适合讲述故事的方式组织 Notebook。

高性能运行时。 marimo 通过静态分析您的代码,仅运行真正需要运行的单元格。

开箱即用。 marimo 自带 GitHub Copilot、AI 助手、Ruff 代码格式化、HTML 导出、快速代码补全、VS Code 扩展、交互式数据帧查看器以及许多其他提升体验的功能。

快速入门

我们 YouTube 频道上的 marimo 概念播放列表概述了许多功能。

安装。 在终端中运行:

pip install marimo  # or conda install -c conda-forge marimo
marimo tutorial intro

要安装能够开启 SQL 单元格、AI 补全等功能的附加依赖项,请运行:

pip install marimo[recommended]

创建 Notebook。

创建或编辑 Notebook:

marimo edit

运行应用。 将 Notebook 作为 Web 应用运行。默认情况下,Python 源代码不会发送到浏览器,因此它保持隐藏且不可编辑。

marimo run your_notebook.py

作为脚本执行。 在命令行将 Notebook 作为脚本执行:

python your_notebook.py

自动转换 Jupyter Notebook。 使用 CLI 自动将 Jupyter Notebook 转换为 marimo Notebook:

marimo convert your_notebook.ipynb > your_notebook.py

或使用我们的 Web 界面。

教程。 列出所有教程:

marimo tutorial --help

共享云端 Notebook。 使用类似于 Google Colab 的云端 marimo notebook 服务 molab 来创建和共享 Notebook 链接。

有疑问吗?

请查看我们的 常见问题解答 (FAQ)。

了解更多

marimo 上手非常简单,同时也为高级用户提供了充足的空间。例如,这是一个用 marimo 制作的嵌入可视化工具(在 molab 上体验实时 Notebook!)

查看我们的指南、使用示例和我们的画廊以了解更多信息。

教程 输入组件 绘图 布局
Open in molab Open in molab Open in molab Open in molab

贡献

我们感谢所有的贡献!您不需要成为专家即可提供帮助。有关如何开始的更多详细信息,请参阅 CONTRIBUTING.md。

有疑问吗?请在 Discord 上与我们联系。

社区

我们正在建立一个社区。欢迎来和我们交流!

NumFOCUS 关联项目。 marimo 是更广泛的 Python 生态系统的核心部分,也是 NumFOCUS 社区的成员,该社区包括 NumPy、SciPy 和 Matplotlib 等项目。

NumFOCUS affiliated project

灵感来源 ✨

marimo 是对 Python Notebook 的重塑,将其定义为一个可重复、可交互、可共享的 Python 程序,而非一个易出错的 JSON 草稿本。

我们相信所使用的工具塑造了我们的思维方式——更好的工具成就更好的大脑。通过 marimo,我们希望能为 Python 社区提供一个更好的编程环境,用于进行研究并交流成果;用于试验代码并分享心得;用于学习计算科学并传授知识。

我们的灵感来自许多地方和项目,特别是 Pluto.jl、ObservableHQ 以及 Bret Victor 的文章。marimo 是通往响应式数据流编程这一更伟大运动的一部分。从 IPyflow、streamlit、TensorFlow、PyTorch、JAX 到 React,函数式、声明式和响应式编程的理念正在改善各类工具。

最后,我们要感谢 Bennet Meyers 和 David Chassin 从最初开始就对 marimo 的信任:这项工作部分得到了美国能源部关键矿产与能源创新办公室 (CMEI) 综合能源系统办公室 (IESO) 的支持,协议号为 34368。

marimo logo