Jupyter與PyCharm不可兼得?Jupytext就是你需要的!
本文轉載自 機器之心 ,禁二次轉載
Jupyter Notebook 真的是讓人又愛又失望,在有的場景下它極其便利,但是在很多大模型或複雜專案上,它又無能為力。在 Jupytext 這個專案中,作者希望既能利用 Notebook 的視覺化優勢,同時也能利用純文字編寫優勢。可以說,是時候聯合 Jupyter Notebook 與 PyCharm 了。
-
Jupytext 專案地址:https://github.com/mwouts/jupytext
Jupyter Notebook 哪不行?
Jupyter Notebook 是一款免費、開源的互動式 web 工具。研究人員可以利用該工具將軟體程式碼、計算輸出、解釋文字和多媒體資源組合在一個文件中。筆記本形式的計算已經發展了幾十年,但是過去幾年裡,Jupyter 特別受歡迎,更是成為資料科學家和機器學習研究者們的首選工具。
在 GitHub 的一項分析中(Nature,30 OCTOBER 2018)顯示,截至 2018 年 9 月,公開的 Jupyter Notebook 已經超過了 250 萬份,而 2015 年這一數字僅為 20 萬左右。Jupyter Notebook 之所以這麼流行,主要還是它的演示和視覺化,我們可以檢視每一段程式碼的輸出與執行效果。
這種視覺化對於資料科學和機器學習研究而言非常重要,因為我們需要當前的模型特性做決策。此外,正因為這種直觀的視覺化輸出,我們經常使用它作為模型教程,Colab 這種提供免費 GPU 算力的平臺也都採用的是 Jupyter Notebook。
因此總的而言,Jupyter 的主要特點是:
-
行內程式碼執行
-
簡單的構思結構
-
對圖片和資料幀的良好展示
但是,Jupyter Notebook 也有不好的地方,我們很難用它做版本控制,也很難用於工程實踐。其中比較重要的是版本控制,Jupyter Notebook 採用的是 JSON 結構,可讀性比較差。而版本控制能讓我們發覺潛在的優秀程式碼,我們可以關注程式碼的變化而挖掘到底哪些是重要的。
直到現在,版本控制和 Jupyter Notebook 都是兩個世界的人,它們之間基本沒有啥關係。雖然也有一些工作嘗試結合兩者,但成果非常有限,對開發者的使用而言也不友好。
Jupytext 來啦
現在,Jupytext 來啦,我們可以把 Jupyter Notebook 程式碼轉化成純文字,用我們最喜歡的 IDE 開啟。重要的是,Jupytext 能清楚地檢視程式碼的修改記錄,從而更好地進行版本控制,這是以前 Jupyter Notebook 所做不到的。這樣的 Jupytext 是不是就是你苦苦追尋的工具?
在上面的視訊中,專案作者展示瞭如何快速使用 Jupytext,我們可以使用最喜歡的純文字編輯器或 IDE 來編輯 Jupyter Notebook。這樣子,Jupyter Notebook 也能有快飛一般的編寫速度了,因為不論是程式碼導航、編輯或執行程式碼單元、debug 程式碼等等,IDE 都要便捷一些。
當然,如果要使用其它 IDE,Jupyter Notebook 的格式還是要轉換的。目前 Jupytext 能將 Jupyter Notebook 轉換為一下一些格式:
-
Markdown 和 R Markdown 文件
-
Julia、Python、R、Bash、Scheme、Clojure、Matlab、Octave、C++ 和 q/kdb+ 指令碼
如果我們將 Jupyter Notebook 儲存為 Python 指令碼,那麼就可以將 Python 檔案匯入 Git 倉庫,並追蹤程式碼的修改和變化。有意思的是,Python 程式碼的修改是在 Jupyter Notebook 中完成的,這在以前是無法直接追蹤的。
更有意思的是,如果我們需要使用 IDE 重構程式碼或其它操作,那麼可以直接在 PyCharm 中編輯並儲存 Python 檔案。在重新整理 Notebook 後,我們可以繼續在 Jupyter 上便捷更新後的程式碼。相當於,Jupyter 和 PyCharm 聯合便捷了~
Jupytext 使用姿勢
Jupytext 的安裝非常簡單,用 pip 或 conda 直接安裝就行了。此外,我們有多種方式使用 Jupytext,以下簡要展示了幾種方式以及使用介面。
直接在 Jupyter Notebook 或 JupyterLab 中使用:Jupytext 提供內容管理器,允許 Jupyter 將 notebook 儲存為你喜歡的格式,來補充或替代傳統的.ipynb 檔案。你可以在自己喜歡的編輯器中邊界文字表示。編輯完成後,在 Jupyter 中重新整理 notebook 即可:輸入單元載入自文字檔案,輸出單元重新載入自.ipynb 檔案。「重新整理」這個動作會儲存核心變數,這樣你就可以無需重新執行 notebook,在 notebook 中繼續工作、執行修改後的單元。
在命令列中使用:Jupytext 將 Jupyter notebook 轉換為文字表示。命令列工具可以多種方式在 notebook 上執行。它可以同步處理 notebook 的多個表示,將 notebook 輸送至 black 等重新格式化工具中。如果你想在提交.ipynb 檔案時自動更新文字表示,它還可以作為 pre-commit hook 使用。
在 Vim 中使用:編輯你的 Jupyter notebook,使用 jupytext.vim 將其表示為 Markdown 文件或 Python 指令碼。
Jupyter Notebook 中的 Jupytext 選單是這樣的:
在 JupyterLab 中以 Notebook 形式開啟 MarkDown 指令碼是這個樣子的:
專注於資料科學領域的知識分享
歡迎在文章下方留言與交流