自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

只有想不到,「99」種擴(kuò)展Jupyter功能的好方法

開發(fā) 開發(fā)工具 前端
Jupyter 生態(tài)系統(tǒng)非常完善與強(qiáng)大,基本上沒有它做不到的,只有你想不到的。在這篇文章中,作者介紹了能擴(kuò)展 Jupyter 功能的各種方向,也許下一次需要時(shí),就能真正「想到」這類擴(kuò)展操作。

當(dāng)有人說:「你可以用 Jupyter 擴(kuò)展解決這個(gè)問題」,他們可能沒有說清楚是什么樣的擴(kuò)展。Jupyter 生態(tài)系統(tǒng)是非常模塊化且具有擴(kuò)展性的,所以有很多種擴(kuò)展方式。這個(gè)博客希望能總結(jié)最常用的 Jupyter 擴(kuò)展,并幫助你發(fā)掘生態(tài)系統(tǒng)中的新功能。

[[269289]]

JupyterLab 擴(kuò)展

在 JupyterLab 中用 jupyterlab-drawio 擴(kuò)展繪圖

JupyterLab 是廣受歡迎的 Jupyter Notebook「新」界面。它是一個(gè)交互式的開發(fā)環(huán)境,可用于筆記本、代碼或數(shù)據(jù),因此它的擴(kuò)展性非常強(qiáng)。使用相關(guān)的擴(kuò)展,可以添加一整套新功能,或者完全改變界面的運(yùn)行方式。這些擴(kuò)展是基于 TypeScript 火 JavaScript 寫的,它們?cè)跒g覽器里運(yùn)行。

經(jīng)典的 Jupyter Notebook 擴(kuò)展

Jupyter Notebook 中的內(nèi)容列表擴(kuò)展

人們總是會(huì)想到經(jīng)典的 Jupyter 筆記本界面,但實(shí)際上,你可擴(kuò)展它的各個(gè)模塊。這些 JavaScript 客戶端可以讓你按照自己的想法添加或改變功能,它們和 JupyterLab 擴(kuò)展是一樣的。

筆記本服務(wù)器擴(kuò)展(serverextention)

和前兩種擴(kuò)展不同,Jupyter 筆記本的服務(wù)器擴(kuò)展使用 Python 語言編寫,并加入了很多服務(wù)端的功能,以下有兩個(gè)主要的例子。

在 JupyterLab 中預(yù)覽 LaTeX 內(nèi)容

(1) 預(yù)覽 LaTeX

***個(gè)是一個(gè)為 JupyterLab 或經(jīng)典的 Jupyter 筆記本提供的后端擴(kuò)展——jupyterlab-latex。它可以在 JupyterLab 中預(yù)覽 LaTeX 文件。它有一個(gè)和 JupyterLab 文本編輯器集成的擴(kuò)展,以及一個(gè)后端服務(wù)器擴(kuò)展,可以運(yùn)行 LaTeX 命令,并在前端顯示效果。

(2) 集成網(wǎng)絡(luò)應(yīng)用

第二個(gè)則是為提供服務(wù)端處理提供用戶界面的擴(kuò)展。因?yàn)榉?wù)網(wǎng)擴(kuò)展可以作為任意 TornadoHTTP handler,因此任何你想得到的網(wǎng)絡(luò)應(yīng)用都可以寫成一個(gè) Jupyter 服務(wù)擴(kuò)展。這里的例子是 npgipuller,提供了用戶界面,可以將 git 代碼倉庫發(fā)布給用戶。

(3 Jupyter 內(nèi)核

你可能已經(jīng)很熟悉在 Jupyter 筆記本中使用 Python 語言了,其實(shí)你可以在其中運(yùn)行很多語言:R、Julia、JavaScript、Octave、Scala/Spark、C++、bash,甚至是 Matlab。這些都被稱作內(nèi)核。你可以為自己常用的編程語言寫一個(gè)內(nèi)核,將 Jupyter 協(xié)議直接用在上面,用 metakernel 項(xiàng)目打包,或者用 Xeus 打包成 C++依賴。內(nèi)核制作好以后,它可以在任何一個(gè) Jupyter 前端運(yùn)行,包括經(jīng)典筆記本、JupyterLab、 nteract、Jupyter 命令行等。

IPython Magics

如果你在筆記本里寫過如%matplotlib inline 這樣的命令,那么你已經(jīng)嘗試過 IPython 功能了。這些命令就像是 Python 中的宏(macro)——你可以寫定制化的代碼,將剩余的代碼塊獨(dú)立出來,然后做自己想做的事情。

這種魔術(shù)函數(shù)從% 開始,然后通過% 后面的代碼發(fā)揮功能。例如%cd somedirectory 可以切換 Python 運(yùn)行中的文件目錄。代碼塊功能從%% 開始,并運(yùn)行后面的整個(gè)塊。%%timeit 應(yīng)該是***的,它可以提供運(yùn)行代碼塊的時(shí)間。

你也可以構(gòu)建自己的魔術(shù)函數(shù)。例如,ipython-sql (https://github.com/catherinedevlin/ipython-sql) 包提供%%sql 命令,可以和 sql 數(shù)據(jù)庫無縫工作。然而,和之前列出的擴(kuò)展不同,IPython 的命令只能在有 IPython 內(nèi)核的環(huán)境工作。

IPython 小工具

用 drop down 玩轉(zhuǎn)繪圖功能。

用 drop down 玩轉(zhuǎn)繪圖功能。

IPython 小工具為 Jupyter 筆記本和 IPython 內(nèi)核提供了 GUI 工具。這些工具可以讓你在共享筆記本時(shí),使用 GUI 調(diào)試,而非使用代碼。如果和其他工具,如 voila 聯(lián)用,你可以制作一個(gè)類似儀表盤一樣的應(yīng)用,其他人可以直接使用,甚至都不知道這是一個(gè) Jupyter 筆記本。

你可以自己定制一些工具,為其他人提供領(lǐng)域內(nèi)的動(dòng)態(tài)可視化。例如,你可以用 ipyleaflet 制作動(dòng)態(tài)地圖,用 itk-jupyter-widget 動(dòng)態(tài)地研究圖像分割/配準(zhǔn)任務(wù),或者用 pythreejs 建模 3D 目標(biāo)。

內(nèi)容管理器

內(nèi)容管理器決定了你讀寫文件時(shí)的操作。默認(rèn)情況下,管理器從本地文件系統(tǒng)中讀寫文件,但是一個(gè)定制化的管理器可以從其它地方讀寫文件,如 Amazon S3 / Google Cloud Storage、PostgreSQL、HDFS 等。你可以通過 web 界面讀寫它們,就好像文件在本地一樣。

我最喜歡的內(nèi)容管理器是 Jupytext。在你讀寫.ipynb 的文件時(shí),它會(huì)將其轉(zhuǎn)換為.py 文件,并保持文件同步。在你 IDE 中對(duì)一個(gè).py 文件進(jìn)行了很多編輯后,可以自動(dòng)在筆記本中看到這些更新,這是很神奇的事情。

Jupytext: .ipynb 或者 .py? 我全都要

Jupytext: .ipynb 或者 .py? 我全都要

擴(kuò)展 JupyterHub

JupyterHub 是多用戶應(yīng)用,可以使用于教學(xué)、實(shí)驗(yàn)室或者生產(chǎn)中。這些組織很可能有其它系統(tǒng),所以 Jupyter 需要和這些系統(tǒng)集成到一起。以下是一些擴(kuò)展 JupyterHub 的簡單方法。

(1) 認(rèn)證器

JupyterHub 是一個(gè)多用戶應(yīng)用,所以用戶需要登錄,認(rèn)證器的工作是對(duì)登錄用戶進(jìn)行身份驗(yàn)證?,F(xiàn)在已經(jīng)有許多流行的驗(yàn)證器了,如 LDAP、OAuth(Google、GitHub、CILogon、Globus、Okta、Canvas 等)。你可以寫一個(gè)自己需要的認(rèn)證器,因此 JupyterHub 可以覆蓋各種使用場景。

(2) 生成器(Spawner)

如果使用一個(gè)可插拔的生成器,你可以用很多方法給每個(gè)用戶提供 Jupyter 筆記本服務(wù)器。你可能讓他們從一個(gè)節(jié)點(diǎn)生成 Docker 容器、將它們連接到 Kubernetes 上、讓它們使用你的 HPC 集群、或者使用你的 Hadoop 或者 Spark 集群、用 systemd 提供服務(wù)、或者直接將這些服務(wù)器視為不同的 Linux 用戶。這些生成器一般都很容易定制參數(shù),當(dāng)然你也可以自己寫一個(gè)。

(3) 服務(wù)

你有時(shí)希望給 JupyterHub 用戶提供額外服務(wù)——在閑置時(shí)回收資源,或者讓他們發(fā)布筆記本。你可以運(yùn)行一個(gè) JupyterHub Service 來提供這些服務(wù)。用戶可以發(fā)起請(qǐng)求,而服務(wù)也可以向 JupyterHub 發(fā)起 API 請(qǐng)求。這些可以是直接的請(qǐng)求,或者網(wǎng)絡(luò)服務(wù)。例如,BinderHub (https://github.com/jupyterhub/binderhub) 是 JupyterHub 服務(wù)中的一種。

NBConvert Exporter

Nbconvert 擴(kuò)展可以令筆記本格式的文件和其他格式相互轉(zhuǎn)換。如果你導(dǎo)出筆記本到 PDF、LaTeX、HTML 或者 nbviwer 的話,你已經(jīng)使用了這個(gè)擴(kuò)展。在這個(gè)擴(kuò)展里,對(duì)應(yīng)每一個(gè)格式都有一個(gè)導(dǎo)出器,你也可以寫一個(gè)針對(duì)自己格式的導(dǎo)出器,或者可以利用已有的定制一個(gè)。

在寫這篇博客時(shí),我最開心的時(shí)刻是發(fā)現(xiàn)有 docx 文檔(word)導(dǎo)出器。

word 導(dǎo)出器:https://github.com/m-rossi/jupyter-docx-bundler

Bundler 擴(kuò)展

很容易就能找到 nbconvert 導(dǎo)出器的方法

很容易就能找到 nbconvert 導(dǎo)出器的方法

Bundler 擴(kuò)展使你可以在菜單欄添加「下載為」按鈕。這個(gè)按鈕和 nbconvert 導(dǎo)出器聯(lián)用,使得導(dǎo)出器更容易被找到,盡管你可以寫一個(gè)定制化的擴(kuò)展,使筆記本在下載前進(jìn)行任何操作。例如,nbreport 擴(kuò)展提供一個(gè) bundler 擴(kuò)展,可以將筆記本格式導(dǎo)出為 HTML。

Repo2Docker

Repo2Docker 擴(kuò)展將 git 或者其他倉庫轉(zhuǎn)換為可重新使用、適合于數(shù)據(jù)科學(xué)的 docker 鏡像。網(wǎng)站 mybinder.org(和其他 binderhub 安裝包)使用這個(gè)擴(kuò)展構(gòu)建和運(yùn)行 Jupyter/RStudio 進(jìn)程。如下所示,現(xiàn)在有兩種擴(kuò)展 repo2docker 的方式。

(1) BuildPacks

Repo2docker 會(huì)查看代碼庫中的內(nèi)容,并決定如何去構(gòu)建它。例如,如果里面有 requirements.txt 文件,它會(huì)設(shè)置一個(gè)小型 conda 環(huán)境,并把 Python 包安裝進(jìn)去。如果里面有 install.R 文件,擴(kuò)展則會(huì)保證 R/RStudio 已經(jīng)安裝。寫一個(gè) BuildPack (https://repo2docker.readthedocs.io/en/latest/architecture.html#buildpacks) 使你可以將這個(gè)功能擴(kuò)展到你喜歡的編程語言中。

(2) ContentProviders

Repo2docker 中的 repo 部分有點(diǎn)用詞不當(dāng)——實(shí)際上你可以將任何程序打包進(jìn)一個(gè) Docker 鏡像中?,F(xiàn)在,它支持 git 本地文件夾和 zenodo (https://zenodo.org/) 代碼倉庫,但是你可以為自己喜歡的代碼源添加支持,并制作一個(gè)新的 ContentProvider。

只有這些了嗎?

當(dāng)然不是!Jupyter 生態(tài)是一個(gè)很大的系統(tǒng),一篇博客無法完全覆蓋所有內(nèi)容。這個(gè)博客已經(jīng)少了一些,如 enterprise gateway 和 TLJH Plugins。Jupyter 的生態(tài)是活躍多變的,很快還有更多好用的擴(kuò)展出現(xiàn)。

原文鏈接:https://blog.jupyter.org/99-ways-to-extend-the-jupyter-ecosystem-11e5dab7c54

【本文是51CTO專欄機(jī)構(gòu)“機(jī)器之心”的原創(chuàng)譯文,微信公眾號(hào)“機(jī)器之心( id: almosthuman2014)”】 

戳這里,看該作者更多好文

責(zé)任編輯:趙寧寧 來源: 51CTO專欄
相關(guān)推薦

2012-07-11 10:38:34

JavaScript

2015-05-05 11:00:13

大數(shù)據(jù)時(shí)代創(chuàng)意

2015-09-11 11:13:15

可穿戴設(shè)備

2023-12-13 14:26:29

2022-10-11 14:39:18

泄露數(shù)據(jù)數(shù)據(jù)安全

2009-04-18 06:23:33

Linux漫畫

2012-06-26 14:21:50

JavaScript

2018-09-28 16:20:57

區(qū)塊鏈區(qū)塊鏈技術(shù)比特幣

2011-07-28 10:10:31

Linux

2017-06-01 16:20:08

MySQL復(fù)制延遲數(shù)據(jù)庫

2018-06-15 09:00:00

2011-04-12 09:12:06

程序員

2015-08-05 17:16:03

OpenStackUnitedstack

2022-08-02 15:04:36

JavaScript

2011-08-02 09:31:52

SQL語句字符串

2012-04-23 22:50:49

Windows 8

2019-07-18 11:17:53

數(shù)據(jù)

2014-09-16 16:42:39

物聯(lián)網(wǎng)應(yīng)用

2011-10-27 17:23:04

iOS 5iOS 4蘋果

2012-04-26 09:45:52

程序員
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)