Jupyter

**Jupyter**（/ˈdʒuːpɪtər/）是一個非營利組織，旨在「為數十種程式語言的互動式計算開發開源軟體，開放標準和服務」。2014 年由 Fernando Pérez 從 IPython 中衍生出來，Jupyter 支援幾十種語言的執行環境。Jupyter 專案開發並支援互動式計算產品 Jupyter Notebook（檔案格式是.ipynb 檔案）、JupyterHub 和 JupyterLab。

## 歷史

2014 年，Fernando Pérez 宣布從 IPython 中衍生出一個名為 Jupyter 的專案。IPython 繼續以 Python shell 和 Jupyter 核心的形式存在，而 IPython Notebook 和其他與語言無關的部分移到了 Jupyter 名下。 它支援幾十種語言的執行環境（也就是核心），這些語言包括 Julia、R、Haskell、Ruby，當然還有 Python（透過 IPython 核心）。

## 產品理念

Jupyter 專案的經營理念是透過開發開源軟體，支援所有程式語言之間的互動式資料科學和科學計算。根據 Jupyter 專案網站所言，「Jupyter 將永遠是 100% 的開源軟體，所有人都可以免費使用，並在修改後的 BSD 許可的自由條款下發布。」

## 產品

### Jupyter Notebook

Jupyter Notebook（前身是 IPython Notebook）是一個基於 Web 的互動式計算環境，用於創建 Jupyter Notebook 檔案。Jupyter Notebook 檔案是一個 JSON 檔案，包含一個有序的輸入 / 輸出單元格列表，這些單元格可以包含程式碼、文字（使用 Markdown 語言）、數學、圖表和富媒體 (Rich media)，通常以「.ipynb」結尾附檔名。

Jupyter Notebook 檔案可以透過 Web 界面中的「Download As」，透過 nbconvert 函式庫或 shell 中的「jupyter nbconvert」命令行界面，轉換為許多的開源標準輸出格式（HTML、演示投影片、LaTeX、PDF、reStructuredText、Markdown、Python)。

為了簡化 Jupyter Notebook 檔案在 Web 上的視覺化，nbconvert 函式庫是透過 nbviewer 提供的一項服務，它可以獲取任何公開可用的 Notebook 檔案的 URL，將其動態轉換為 HTML 並顯示給使用者。

Jupyter Notebook 提供了一個基於瀏覽器的 REPL，它建立在一些流行的開源函式庫之上:

* IPython
* ØMQ
* Tornado（Web 伺服器）
* jQuery
* Bootstrap（前端框架）
* MathJax

Jupyter Notebook 允許使用多種語言進行編程。在 2.3 版本（2014 年 10 月）中，目前有 49 個與 Jupyter 相容的核心，可以用於許多程式語言，包括 Python、R、Julia 和 Haskell。

IPython 在 0.12 版本（2011 年 12 月）中添加了 Notebook 界面，2015 年更名為 Jupyter Notebook（IPython 4.0 - Jupyter 1.0）。Jupyter Notebook 類似於 Maple、Mathematica 和 SageMath 等程式的筆記本界面，SageMath 是一種計算界面風格，起源於 Mathematica 在 20 世紀 80 年代。據《大西洋》雜誌報導，在 2018 年初，使用者對 Jupyter 的興趣超過了 Mathematica Notebook 界面的流行程度。

### Jupyter Kernels

Jupyter Kernel 是一個負責處理各種類型的請求（程式碼執行、程式碼補全、檢查）和提供回復的程式。核心透過網路使用 ØMQ 與 Jupyter 的其他組件通訊，因此可以在相同的或遠程的機器上。與許多其他類似於 Notebook 的接口不同，在 Jupyter 中，核心並不知道它們被附加到特定的檔案，並且可以同時從多個客戶端連接到它們。通常，核心是實現的，允許執行一種語言，但有幾個例外。

Jupyter 附帶 IPython 作為預設核心，並透過 ipykernel 包裝器提供引用實現。許多語言都有各種品質和特性的核心。

### JupyterHub

JupyterHub 是一個用於 Jupyter Notebook 的多使用者伺服器。它透過生成、管理和代理許多單一的 Jupyter Notebook 伺服器來支援許多使用者。

### JupyterHub API

JupyterHub 向外暴露了以 REST 風格的 API 供開發者們使用，可參閱：

它包攬了一系列對 Jupyter 的操作，諸如生成使用者環境，配置環境等。

### JupyterLab

JupyterLab 是 Jupyter 專案的下一代使用者界面。它在一個靈活且強大的使用者界面中提供了經典的 Jupyter Notebook（筆記本、終端、文字編輯器、檔案瀏覽器、豐富輸出 (Rich Text) 等）所有熟悉的構建模組。第一個穩定版本於 2018 年 2 月 20 日發布。

## 行業應用

Jupyter Notebook 已經成為雲端計算的一個流行的使用者界面，主要的雲端提供商已經採用了 Jupyter Notebook 或其衍生工具作為雲端使用者的前端界面。例如亞馬遜的 SageMaker Notebook、Google 的 Colaboratory 以及微軟的 Azure Notebooks

### Colaboratory

Colaboratory（也稱為 Colab）是一個免費的 Jupyter Notebook 環境，它在雲端中運行，並將筆記本存儲在 Google 雲端端硬碟上。Colaboratory 最初是 Jupyter 專案的一部分，但最終被 Google 接管。截止到 2018 年 9 月，Colaboratory 只支援 Python 2 和 Python 3 核心，不支援其他 Jupyter 核心，比如 Julia 和 R。

## 媒體報導

* 2016 年 2 月 11 日，LIGO 宣布首次觀測引力波。這次發布了原始的科學數據以及包含 Python 程式碼的 Jupyter Notebook 檔案，用於處理數據並從發現論文中複製數據。
* 2018 年 4 月 5 日，《大西洋》雜誌發表了一篇名為《科學論文過時了》的文章，討論了 Jupyter Notebook 和 Mathematica Notebook 在未來科學出版中的作用。這篇文章引起了包括經濟學家保羅・羅默在內的著名科學家和學者的回應。

## 資助和獎勵

* 2012 年，Fernando Pérez 因其在 IPython（Jupyter 專案的前身）上的工作而獲得自由軟體基金會的自由軟體進步獎。
* 2013 年，IPython 團隊獲得了艾爾弗・斯隆基金會 115 萬美元的資助，該基金會資助了導致 Jupyter 專案誕生的早期工作。
* 2015 年，Jupyter 專案被資助來自 Leona M. 和 Harry B. Helmsley 慈善信託基金，Gordon 和 Betty Moore 基金會以及艾爾弗・斯隆基金會的聯合 600 萬美元，資助工作導致的擴展功能核心 Jupyter 工具，以及 JupyterLab 的創建。
* 2018 年 5 月 2 日，Jupyter 專案指導委員會榮獲 2017 年 ACM 軟體系統獎，這是一個年度獎項，它表彰「對技術概念和商業接受度方面產生了持久影響的軟體系統」的個人或組織。

## Jupyter

### Online

* Binder
* Colaboratory
* Azure Notebooks

### Windows

* Jupyter Portable
* Anaconda (Python 發行版)

### Mac

* Anaconda (Python 發行版)

### Linux

* Jupyter Lab
* Anaconda (Python 發行版)

## 參考文獻

## 另請參閱

## 外部連結

* 官方網站