这是一款响应式的Python笔记本,具有优秀的可复现性,原生支持Git,并可作为脚本或应用程序部署。
用户手册 · Discord 社区 · 示例 · 展示廊 · YouTube
English | 繁體中文 | 简体中文 | 日本語 | Español
Marimo 是一款响应式 Python 笔记本:运行单元格可与 UI 元素交互,marimo 会自动更新依赖于它的单元格(或将其标记为过时单元格),从而保持代码和输出的一致性。marimo 笔记本以纯 Python 格式存储,可作为脚本执行,也可作为应用程序部署。
为什么选择 marimo
- 🚀 功能齐全:替代
jupyter、streamlit、jupytext、ipywidgets、papermill等更多工具 - ⚡️ 响应式:运行一个单元格,marimo会响应式地运行所有依赖单元格或将它们标记为过时
- 🖐️ 交互性:绑定滑块、表格、图表等UI元素到Python代码——无需回调函数
- 🐍 支持Git版本控制:笔记本以
.py文件格式存储 - 🛢️ 为数据设计:使用SQL查询数据框和数据库,过滤和搜索数据框
- 🔬 可复现:无隐藏状态,确定性执行,内置包管理
- 🏃 可执行:作为Python脚本执行,通过命令行参数进行配置
- 🛜 可分享:部署为交互式Web应用或幻灯片,通过WASM在浏览器中运行
- 🧩 可复用: 可从一个笔记本导入函数和类到另一个笔记本
- 🧪 便于测试: 可在笔记本上运行 pytest
- ⌨️ 现代编辑器:GitHub Copilot、AI助手、vim快捷键、变量浏览器和更多功能
pip install marimo && marimo tutorial intro在我们的在线体验平台试用marimo,完全在浏览器中运行!
跳转到快速入门了解我们的命令行工具。
Marimo 确保了您的代码、输出和程序的状态始的一致性,解决了与 Jupyter 等传统笔记本相关的许多问题。
独有的响应式设计 运行一个单元格,marimo 就会自动运行引用其变量的单元格,从而避免了手动重新运行单元格这一容易出错的工作。删除单元格,marimo 会从程序内存中删除其变量,消除隐藏状态。
兼容计算密集型笔记本。marimo允许您将运行时配置为延迟模式,将受影响的单元格标记为过时而不是自动运行它们。这既能保证程序状态的完整性,又能防止意外执行计算密集型单元格。
同步的UI元素。与UI元素如滑块、下拉菜单、数据框转换器和聊天界面交互时,使用它们的单元格会自动以最新值重新运行。
交互式数据框。分页浏览、搜索、过滤和排序数百万行数据,极速运行,无需编写代码。
高效运行时。marimo通过静态分析代码,只运行需要运行的单元格。
动态Markdown和SQL。使用Markdown创建依赖Python数据的动态文档。或者构建依赖Python值的SQL查询,并针对数据框、数据库、CSV、Google Sheets或其他数据源执行,使用我们内置的SQL引擎将结果作为Python数据框返回。
即使使用了Markdown或SQL,您的笔记本仍然是纯Python代码。
确定性执行顺序。笔记本按照基于变量引用而非单元格页面位置的确定性顺序执行。您可以根据想要讲述的故事组织笔记本。
内置包管理。marimo内置支持所有主要的包管理器,允许您在导入时安装包。marimo甚至可以序列化包依赖到笔记本文件中,并在隔离的venv沙箱中自动安装它们。
功能齐全。marimo集成了GitHub Copilot、AI助手、Ruff代码格式化、HTML导出、快速代码补全、VS Code扩展、交互式数据框查看器和更多便捷功能。
安装 在终端运行以下代码:
pip install marimo # or conda install -c conda-forge marimo
marimo tutorial intro要安装包含额外依赖项的版本(启用SQL单元格、AI补全等功能),运行:
pip install marimo[recommended]创建新的笔记本
使用以下命令创建或编辑笔记本
marimo edit运行应用 将笔记本作为Web应用运行,隐藏并锁定Python代码:
marimo run your_notebook.py作为脚本执行 在命令行中将笔记本作为脚本执行:
python your_notebook.py自动转换已有的 Jupyter 笔记本 通过命令行将 Jupyter 笔记本自动转换为 marimo 格式的笔记本
marimo convert your_notebook.ipynb > your_notebook.py对此,我们也有在线工具可供使用。
教程 列出所有的可用教程:
marimo tutorial --help请参阅我们文档中的FAQ部分。
Marimo 很容易上手,为高级用户提供了很大的空间。 例如,这是一个用 marimo 制作的 embedding 可视化工具 (示例视频):
|
|
|
|
| 教程 | 输入控件 | 绘图 | 布局 |
|
|
|
|
|
我们感谢所有人的贡献! 这是为所有人设计的工具,我们真挚的欢迎任何人的任何意见! 请参阅CONTRIBUTING.md 获取更多信息,了解如何参与到这个项目中来。
有问题?请在Discord上联系我们。
我们也正在建设 marimo 社区,来和我们一起玩吧!
- 🌟 在GitHub上为我们点赞
- 💬 在Discord上与我们交流
- 📧 订阅我们的通讯
- ☁️ 加入我们的云服务候补名单
- ✏️ 在GitHub上开始讨论
- 🦋 在Bluesky上关注我们
- 🐦 在Twitter上关注我们
- 🎥 在YouTube上订阅
- 🕴️ 在LinkedIn上关注我们
marimo 是对 Python 笔记本的重塑,它是一个可复制、可交互、可共享的 Python 程序,而不是容易出错的 JSON 便笺。
我们相信,我们使用的工具会影响我们的思维方式--更好的工具,造就更好的思维。我们希望通过 marimo 为 Python 社区提供一个更好的编程环境,以便进行研究和交流;进行代码实验和分享;学习计算科学和教授计算科学。
我们的灵感来自于很多已有的项目, 特别是 Pluto.jl, ObservableHQ,和 Bret Victor's essays。 marimo 是向响应式数据流编程迈进的一大步。从 IPyflow,streamlit, TensorFlow, PyTorch, JAX,到 React,函数式、声明式和响应式编程的理念正在改善一系列工具。






