天天看點

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。

不要忘記一鍵三連。你的點贊、收藏、關注,是我創作的動力。