什麼是 Jupyter?#
上圖: JupyterLab 中的筆記本,顯示了胰島素受體的互動式檢視。
📘 關於: 本文件解釋了 Jupyter 生態系統中的基本概念和軟體。
“Jupyter”可以有很多含義,所以讓我們從頭開始,一步一步來
最重要的是,“Jupyter 專案”是一個涵蓋許多不同軟體產品和工具的龐大傘形專案。這包括 Jupyter Notebook 和 JupyterLab,它們都是流行的筆記本編輯器程式。Jupyter 專案及其子專案都圍繞著為互動式計算提供工具(和標準)而展開,這些工具使用計算筆記本。如果你對其中一些內容不熟悉,可以參閱下面的引導式介紹,它從頭開始解釋每一個內容。
“Jupyter”一詞通常用作指代其中一個產品或概念的簡稱(這可能會引起混淆)。下面我們將逐一介紹每個部分,並提供一些說明。
到底什麼是“計算筆記本”?#
一位著名的計算機程式設計師 (Donald Knuth) 普及了將解釋性純英文文字與計算機程式碼結合起來的想法,這通常被稱為 文學程式設計。透過採用這種做法,計算機程式以及其他複雜的資訊和思想可以更好地向廣泛人群解釋。
以這種方式編寫的程式可以列印在紙上,作為實際的“筆記本”手工分享,但在現代,它們以“筆記本檔案”的形式進行數字分享,並且可以包含額外的富媒體,如影像、3D 模型和互動式圖形,以及資料和其他程式輸出。
透過使用 JupyterLab 等編輯器程式開啟筆記本,您還可以在筆記本中執行程式碼。由於筆記本可以包含幾乎任何程式碼,因此您可以在筆記本中完成幾乎任何常規軟體可以做的事情。例如,筆記本檔案可能用於
最後三個是真實世界的例子,展示了科學界對計算筆記本的使用。由於科學家、工程師和其他技術人員經常需要執行和交流複雜的計算來描述他們的工作,這些“計算筆記本”成為分享他們工作和想法的非常流行的方式。
筆記本不僅僅適用於 NASA 科學家:學生、愛好者和商務人士通常在 JupyterLab 中使用快速、互動式的工作流程來製作幫助解決日常問題的筆記本。您可以使用它們向他人解釋自己的想法、學習、自動化家庭或工作中的任務、視覺化複雜資訊等等。
當有人使用“筆記本”一詞時,他們可能指的是
他們電腦上的一個筆記本檔案
將計算機程式碼、解釋性文字、影像等組合成“筆記本格式”的想法
用於創作和編輯數字筆記本檔案的“Jupyter Notebook”應用程式
Jupyter 的
.ipynb
筆記本檔案格式(用於將筆記本檔案儲存到計算機上),由nbformat
軟體庫解釋
而“Jupyter”一詞可能指的是
“Jupyter 專案”,這個總括性的傘形專案
“Jupyter Notebook”或“JupyterLab”編輯程式(或其他 Jupyter 產品)
Jupyter 這個名字來源於該專案最初支援的三種程式語言:Julia (ju)、Python (pyt) 和 R (r)。
Jupyter 筆記本編輯器程式如何工作?#
JupyterLab 或 Jupyter Notebook 等筆記本編輯器程式通常會共享一些功能和工作流程,因為它們受到關於計算筆記本、它們的優勢以及如何最有效地使用它們的一系列共同理念的影響。
讓我們來看看其中一些想法。
互動式程式設計 (REPL)#
過去,編寫程式、執行程式和檢視結果通常比現在更慢、更深思熟慮。
隨著時間的推移,人們發現了新的技術,加快了編寫程式碼、執行程式碼和檢視結果的過程。像 Python 這樣的語言也隨後被引入,它們比舊語言提供了一些獨特的優勢。
例如,Python 是一種解釋型語言,因此它不需要在執行前進行編譯(節省了程式設計師的步驟和時間)。它還是一種動態型別語言,不需要程式設計師在使用資料之前提前指定資料的型別,這有時可以節省時間並降低程式碼的複雜性(特別是對於小型、簡單的程式)。
另一種程式設計技術(這是 Jupyter 筆記本編輯程式的關鍵)是讀-求值-列印迴圈(REPL),它允許程式設計師互動式地編寫程式碼、執行程式碼、保持他們的資料和變數完整,然後即時重寫、重新執行和完善他們的程式碼(在程式執行結束後不丟失資料)。
REPL 之所以如此命名,是因為程式設計師編寫的程式碼片段首先被讀取 (R),然後被求值 (E) 或換句話說被執行,結果被列印 (P) 到某種顯示器或輸出,並且這個過程在一個迴圈 (L) 中重複發生,REPL 會一直等待直到程式設計師有另一個程式碼片段要執行。
新的程式碼片段可以引用在之前的求值步驟中定義的變數,因為 REPL 會將(由迴圈的先前執行建立的)物件保留在記憶體中,直到使用者關閉其 REPL。
核心#
JupyterLab 等筆記本編輯器程式會為您每個開啟的筆記本檔案,以您選擇的語言建立一個 REPL(有關這些內容的更多資訊,請參閱上文)。在 Jupyter 生態系統中,每個 REPL 都稱為一個核心,它將您透過筆記本程式碼建立的資料和物件儲存在計算機上長時間執行的程式中(這些核心的管理和建立由 Jupyter 伺服器協調,稍後將詳細介紹)。
這就是為什麼當您連續執行多個筆記本單元格時不會丟失資料和變數的原因,它們會保留在 REPL 內部,以便您可以繼續使用它們來探索您正在研究的資料和問題(但是,如果您關閉了儲存核心的 Jupyter 伺服器,您將丟失這些變數)。
在每個筆記本後臺執行的核心是 Jupyter 筆記本編輯器程式擅長的快速、探索性程式設計工作流的動力。
多個程式,一種體驗(客戶端-伺服器架構)#
Jupyter 專案中的大多數筆記本編輯器程式,例如 JupyterLab,可能看起來像是一種單一的體驗,但是當您在筆記型電腦上執行 JupyterLab 時,實際上有幾個程式獨立執行,它們相互協調,為您提供您可能已經熟悉的筆記本編輯體驗。
這可能看起來是一個不必要的背景細節,但對內部工作原理的一些澄清可以幫助揭開筆記本創作體驗的神秘面紗,並開啟您可以利用的新功能、想法和工作流程。
多部分(模組化)方法對使用 Jupyter 軟體的人和編寫它的人也具有優勢。
讓我們看看其中一些部分
JupyterLab 的介面是一個您在 Firefox 或 Google Chrome 等瀏覽器程式中開啟的 Web 應用程式(網站本身通常包含定義其行為的程式碼,JupyterLab 的介面也不例外)。
Jupyter Server 在後臺執行,它在您執行筆記本時協調筆記本核心的建立、管理和通訊。
Jupyter 核心本身是獨立的程式(作業系統程序),每個核心都是其自己的 REPL,使用您請求的任何語言(通常是 Python,儘管也有數百種其他語言和核心可用)。
透過這種設計,任何程式(您啟用的)都可以使用常見的網際網路通訊技術(如 HTTP)與您的核心進行通訊。這使您能夠跨許多不同的程式編輯、檢視、共享和操作您的資料。一個核心甚至可以同時連線到多個編輯程式!(同樣,在 JupyterLab 中,您可以將筆記本和控制檯連線到同一個核心!)
Jupyter 專案實際上定義了一個標準,其他程式可以遵循該標準,從而能夠以您能想象的幾乎任何方式連線到您的核心。您可以使用核心提供的互動式計算功能,以這種方式發明新的資料編輯和檢視體驗。
多部分設計的優點#
透過將 JupyterLab 等程式分解為多個元件,您可以根據自己的需求定製軟體。如果某個部分缺少某些功能,您可以將其替換為您自己或他人制作的自定義版本,以新增您希望看到的任何功能。
您還可以使用這些元件發明全新的體驗,這些體驗可能是設計者在開始時沒有想到的,而且它們通常可以與現有的 Jupyter 軟體無縫互操作。
例如,由於 Jupyter Server 在一個內聚的、自包含的包中提供了核心通訊和管理功能,新的筆記本編輯器程式可以專注於新增新的介面和編輯體驗,而將建立和管理新核心的任務完全留給 Jupyter Server。
例如,JupyterCAD 是一個基於 Jupyter 軟體構建的 3D 建模工具,還有其他示例。
上圖: JupyterCAD 程式。
與核心通訊(Jupyter 協議)#
任何人都可以透過使用 Jupyter 協議來製作與 Jupyter 核心通訊的新軟體(有關這些內容的更多資訊,請參閱上文)。該協議提供了在核心與其他軟體之間來回傳遞資訊的標準化藍圖。
透過實施 Jupyter 協議中描述的設計,您可以發明全新的互動式程式設計體驗,或者為 Jupyter 新增對新程式語言的支援。
由於 Jupyter 專案是免費和開源的,它鼓勵任何人探索使用其筆記本和核心的新方法,並且樂於提供與其他軟體的相容性和互操作性。
關於 Jupyter 專案我還需要了解什麼?#
Jupyter 軟體是免費和開源的,由全球志願者和貢獻者社群開發,造福所有人。
Jupyter 專案歡迎來自不同背景、擁有各種技能(不僅限於軟體!)的人加入我們!您可以直接與 Jupyter 軟體的開發者分享您的經驗反饋,或者以多種不同方式志願貢獻來幫助 Jupyter,例如:
測試新發布的版本
撰寫教程
新增軟體功能
主持每週視訊會議
幫助社群中的其他人
在 Jupyter Discourse 論壇尋求幫助或提供幫助
……等等!
該專案分為大致獨立的子專案,它們處理 Jupyter 軟體和社群的不同方面。一箇中央委員會,即 Jupyter 執行委員會,負責制定專案範圍內的目標和政策,而不同的子專案則負責各種軟體元件的實際開發。
Jupyter 宇宙的(部分)之旅#
在接下來的章節中,我們將介紹 Jupyter 生態系統中的一些流行元件。這不是 Jupyter 各個方面的全面參考,而是對前面討論的一些重要部分的概括性總結。
如果您是 Jupyter 的完全新手,專案的“關於”頁面是一個很好的閱讀材料,它將向您介紹許多不同的子專案。
如果您想了解更多關於組織結構的資訊,請檢視治理頁面。
如果您想為專案做出貢獻,請檢視“參與其中”頁面。
下圖展示了專案最知名的軟體元件。
此圖中的連線和分組並非正式關係,而只是簡單的指示符,旨在幫助我們在接下來的章節中描繪出大局。
筆記本編輯器程式#
JupyterLab 筆記本編輯器
Jupyter Notebook 筆記本編輯器
Jupyter 專案製作的兩個流行筆記本編輯器程式是 Jupyter-Notebook 和 JupyterLab,儘管還有其他程式。選擇哪一個主要取決於個人偏好(Notebook 和 Lab 都提供了許多相同的編輯和執行筆記本功能)
Jupyter Notebook 提供了簡化、輕量級的筆記本創作體驗
JupyterLab 提供了一個更可定製、功能豐富的、帶標籤的多筆記本編輯環境,並具有可定製的佈局和系統控制檯(程式設計師常用的工具)等附加工具
還有更多!
例如,一位教授可能會將 JupyterLab 用於其日常資料分析工作,並在教學時使用 Jupyter Notebook,為學生提供更簡單、更專注的筆記本內容檢視。
IPython#
很久以前,Jupyter 的前身 ipython
被創建出來(一份即將釋出的文件“Jupyter 的歷史”將更詳細地介紹這一點)。它提供了至今仍用於 Jupyter 軟體的高階 REPL 功能,因為它捆綁在 JupyterLab 和 Jupyter Notebook 中作為預設的 Python 核心。
ipython
提供了一些額外的命令,您可以直接在筆記本單元格中與 Python 程式碼一起輸入。請閱讀以下內容,瞭解其中一些功能的更多資訊
有關 IPython 功能的更多詳細資訊,請檢視 docs.jupyter.org > Projects > IPython
。
筆記本格式#
Jupyter 使用 .ipynb
檔案格式將筆記本檔案儲存在您的計算機上(您的筆記本資料和輸出長期儲存的地方)。.ipynb 格式由 nbformat 軟體庫解釋和修改。
.ipynb
格式是一種 json 文件,它將您的筆記本單元格、程式輸出和元資料儲存在一個結構化的文字檔案中。
JupyterHub#
JupyterHub 提供了一個多使用者管理系統,許多不同的人可以登入並使用他們自己獨立的筆記本編輯器程式和環境。
透過 JupyterHub,編輯和執行筆記本檔案仍然由 Lab 或 Notebook 等編輯器程式執行。Hub 負責驗證使用者身份併為他們提供相應的 Lab/Notebook 例項連線。
JupyterHub 可以設定為不同的系統配置
在單臺計算機中
在計算機叢集中
在雲中的容器中
JupyterHub 對許多不同的多使用者場景都非常靈活。