这是一款响应式的Python笔记本,具有优秀的可复现性,原生支持Git,并可作为脚本或应用程序部署。
用户手册 · Discord 社区 · 示例
English | 简体中文
Marimo 是一款响应式 Python 笔记本:运行单元格可与 UI 元素交互,marimo 会自动更新依赖于它的单元格(或将其标记为过时单元格),从而保持代码和输出的一致性。marimo 笔记本以纯 Python 格式存储,可作为脚本执行,也可作为应用程序部署。
为什么选择 marimo
- 🚀 功能齐全: 替代
jupyter
、streamlit
、jupytext
、ipywidgets
、papermill
等更多工具 - ⚡️ 响应式: 运行一个单元格,marimo 会响应式地运行所有依赖单元格 或 将它们标记为陈旧
- 🖐️ 交互性: 绑定滑块、表格、图表等 UI 元素 到 Python——无需回调
- 🔬 可复现: 无隐藏状态,确定性执行
- 🏃♂️ 可执行: 作为 Python 脚本执行,通过命令行调整参数
- 🛜 可分享: 部署为交互式 Web 应用 或 幻灯片,通过 WASM 在浏览器中运行
- 🛢️ 为数据设计: 使用 SQL 查询数据框和数据库,过滤和搜索 数据框
- 🐍 支持 Git: 笔记本以
.py
文件格式存储 - ⌨️ 现代编辑器: GitHub Copilot、AI 助手、vim 快捷键、变量浏览器,和 更多功能
pip install marimo && marimo tutorial intro
在浏览器中运行在线体验平台!
跳转到快速起步,了解命令行工具。
Marimo 确保了您的代码、输出和程序的状态始的一致性,解决了与 Jupyter 等传统笔记本相关的许多问题。
独有的响应式设计 运行一个单元格,marimo 就会自动运行引用其变量的单元格,从而避免了手动重新运行单元格这一容易出错的工作。删除单元格,marimo 会从程序内存中删除其变量,消除隐藏状态。
与计算成本高昂的笔记兼容 marimo 允许你将运行时配置为 “懒惰”模式,将受影响的单元标记为过时单元,而不是自动运行它们。这样既能保证程序状态,又能防止意外执行昂贵的单元。
同步的 UI 元素 与滑块、下拉菜单和数据框转换器等 UI 元素交互,使用这些元素的单元格会自动以最新值重新运行。
高效运行 通过静态分析代码,marimo 只运行需要运行的单元。
动态的 Markdown 与 SQL 使用 Markdown 编写 Python 代码的输出动态进行更新的文档。同时,使用内置 SQL 引擎,可创建依赖于 Python 值的 SQL 查询,并针对数据框、数据库、CSV、Google Sheets 或其他任何内容执行查询,SQL 引擎会将结果返回为 Python 数据框。
即使笔记本(notebook)使用了 markdown 或 SQL,它仍然是纯 Python 程序。
确定性的执行顺序 笔记本的执行顺序是确定的,基于变量引用,而不是单元格在页面上的位置。根据你顺序逻辑来组织笔记本。
易用且强大 Marimo 集成了包括 GitHub Copilot、Ruff 代码格式化、HTML 导出、快速代码补全、VSCode 扩展、交互式数据框查看器等非常有用的功能。
安装 在终端运行以下代码:
pip install marimo # or conda install -c conda-forge marimo
marimo tutorial intro
或者在 Gitpod 运行
单击此链接以在 Gitpod 工作区中打开存储库:
https://gitpod.io/#https://github.com/marimo-team/marimo
创建新的笔记本
使用以下命令创建或编辑笔记本
marimo edit
运行应用 将笔记本作为网络应用程序运行,隐藏 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 可视化工具 (示例视频):
参阅我们的 用户手册,
在 examples/
文件夹下, 以及我们的精选示例。
教程 | 自定义输入 | 自定义绘图 | 自定义布局 |
我们感谢所有人的贡献! 这是为所有人设计的工具,我们真挚的欢迎任何人的任何意见! 请参阅CONTRIBUTING.md 获取更多信息,了解如何参与到这个项目中来。
看到这里,如果你有任何的想法或者问题,欢迎加入我们的 Discord!
我们也正在建设 marimo 社区,来和我们一起玩吧!
- 🌟 给我们的项目点一颗星星
- 💬 在 Discord 上与我们交流
- 📧 订阅我们的最新动态
- ☁️ 加入我们的云服务器候补名单
- ✏️ 在 github 上开始一个讨论话题
- 🐦 在推特上关注我们
- 🕴️ 在领英上关注我们
marimo 是对 Python 笔记本的重塑,它是一个可复制、可交互、可共享的 Python 程序,而不是容易出错的 JSON 便笺。
我们相信,我们使用的工具会影响我们的思维方式--更好的工具,造就更好的思维。我们希望通过 marimo 为 Python 社区提供一个更好的编程环境,以便进行研究和交流;进行代码实验和分享;学习计算科学和教授计算科学。
我们的灵感来自于很多已有的项目, 特别是 Pluto.jl, ObservableHQ,和 Bret Victor's essays。 marimo 是向响应式数据流编程迈进的一大步。从 IPyflow,streamlit, TensorFlow, PyTorch, JAX,到 React,函数式、声明式和响应式编程的理念正在改善一系列工具。