天天看点

jp notebook的大难题有人出手解决,值得关注

作者:外星人玩Python

前言

用 python 做数据相关工作的,相信必定用过 jupyter notebook,前段时间就有人跟我吐槽,因为 jupyter notebook 的问题,差点丢掉工作。

类似下面的情况:

jp notebook的大难题有人出手解决,值得关注

第二个单元格生成最终的数据,但是里面使用了第一个单元格定义的变量。好巧不巧,修改了第一个单元格内容并执行,却忘记执行第二个单元格。

这也是我经常需要提示自己,每次都要从头到尾执行一次。

这也是为什么这些环境中,每个单元格前面都有一个小数字,就是为了提醒你,这些单元格的执行次序。

但这现在已经不再是问题了。你能想象,当我执行第一个单元格的时候,第二个单元格会自动更新内容吗?

jp notebook的大难题有人出手解决,值得关注

这就是 marimo,它并不是一个库,而是一个 python 平台。它不仅仅是自带响应式更新单元格数据。还能编写一些页面组件,让你更直接编写自己的数据报告页面。

我们来体验一下。

通过 pip 安装并启动:

pip install marimo -U && marimo tutorial intro           

如无意外,能看到服务启动的信息:

jp notebook的大难题有人出手解决,值得关注

浏览器也会自动打开了页面。

由于上面的命令是启动内置的模板,里面已经有了一些内容。

简单来介绍一些关键。

我们需要在 mariom 的服务页面上写 python 代码。导入它,后面用于创建页面元素。

jp notebook的大难题有人出手解决,值得关注

mo.md 写入 markdown 内容。上方显示内容。

这也太普通了。弄一个能交互的东西吧

jp notebook的大难题有人出手解决,值得关注

乍看之下,没什么作用。但是,现在可以在其他的单元格中使用定义的变量 slider :

jp notebook的大难题有人出手解决,值得关注
  • 注意的是 slider.value 访问组件的值

现在,拖动下方的 slider,上方单元格的'叶子'也会显示相应的数量。

有趣吧。现在我们不再需要担心某些单元格因为个人疏忽忘记执行了。页面总是最新的可用的结果。

jp notebook的大难题有人出手解决,值得关注

有人会说,这些还不够吸引我,如果能发给别人看就完美了。

接下来看看几种分发的方式。

打开右上角的按钮

jp notebook的大难题有人出手解决,值得关注

选第二项,显然是导出一份静态的 html 文件。

jp notebook的大难题有人出手解决,值得关注

此时如果浏览器打开后,还能联动,那就神了。

jp notebook的大难题有人出手解决,值得关注

可想而知,静态文件导出,作用不是非常大。适合页面上没有交互的组件。

那么,能不能直接把代码文件发给别人,别人安装了 mariom 情况下,可以跑起来。这肯定是可以,并且与 jp notebook 很不一样的地方在于,mariom 生成的是普通的 python 代码文件。

在页面最上方可以看到当前的代码文件所在:

jp notebook的大难题有人出手解决,值得关注

找到文件,我们可以复制到其他的地方:

jp notebook的大难题有人出手解决,值得关注
  • 可以看到里面都是普通的 python 代码

那么怎么运行一个已经存在的 mariom 代码文件?

marimo run intro.py           

执行命令即可。

命令 marimo edit intro.py 可以编辑状态打开文件

不过,这种方式只适合团队之间共享。还有其他的方式吗?

很自然想到的是发布成 web 。

会很复杂吗?其实你可能早就做到了。在前面的例子,当我们运行 marimo ,可以看到控制台输出的一段信息:

jp notebook的大难题有人出手解决,值得关注

其实本身就已经是一个 web。

不要忘记一键三连。你的点赞、收藏、关注,是我创作的动力。