cao死我好湿好紧好爽动态视屏|精选久久久久久久久久|中文无码精品一区二区三区四季|AAA国语精品刺激对白视频|

當(dāng)前位置:首頁(yè) > 網(wǎng)站建設(shè) > 正文內(nèi)容

js設(shè)置html5禁止橫屏(js怎么阻止頁(yè)面跳轉(zhuǎn))

網(wǎng)站建設(shè)9個(gè)月前 (04-21)436

作者:京東科技隱私計(jì)算產(chǎn)品部 孫曉軍

1. Jupyter Notebook介紹

圖1 Jupter項(xiàng)目整體架構(gòu)

[https://docs.jupyter.org/en/latest/projects/architecture/content-architecture.html]

Jupyter Notebook是一套基于web的交互式開(kāi)發(fā)環(huán)境。用戶可以在線開(kāi)發(fā)和分享包含代碼和輸出的交互式文檔,支持實(shí)時(shí)代碼,數(shù)學(xué)方程,可視化和 markdown等。用途包括:數(shù)據(jù)清理和轉(zhuǎn)換,數(shù)值模擬,統(tǒng)計(jì)建模,機(jī)器學(xué)習(xí)等等。

Jupyter Notebook內(nèi)部通過(guò)內(nèi)核維護(hù)狀態(tài)并運(yùn)行代碼片段,瀏覽器顯示代碼片段和其執(zhí)行的結(jié)果。Jupyter Notebook提供了一個(gè)用戶交互式的開(kāi)發(fā)環(huán)境,用戶可以通過(guò)執(zhí)行一部分代碼片段,并觀察執(zhí)行結(jié)果。這種交互式設(shè)計(jì),使得Jupyter Notebook非常適合數(shù)據(jù)科學(xué)和機(jī)器學(xué)習(xí)的開(kāi)發(fā)工作。

注意本文的代碼和腳本,均基于Jupyter Notebook v6.5.2穩(wěn)定版本。

2. Jupyter的工作方式

展開(kāi)全文

圖2 Jupter Notebook工作方式

[https://docs.jupyter.org/en/latest/projects/architecture/content-architecture.html]

Jupyter的主要工作單元是Jupyter Server和Kernel。其中Jupyter Server用來(lái)提供基于Web的界面和API服務(wù),Kernel用來(lái)執(zhí)行代碼片段。瀏覽器通過(guò)Http和Websockets的方式和Jupyter Server進(jìn)行交互,Jupyter Server和kernel之間,通過(guò)ZeroMQ進(jìn)行數(shù)據(jù)通信。

Jupyter Server采用經(jīng)典的MVC模式,使用了tornado作為web服務(wù)器,用來(lái)提供地址映射和控制器邏輯,使用jinja2來(lái)提供模板視圖功能。

Jupyter Notebook(v6.5.2)項(xiàng)目的主要模塊結(jié)構(gòu)如下:

模塊說(shuō)明notebookNotebook功能模塊。terminal終端模塊。為Jupyter提供控制臺(tái)交互能力。view文件可視化模塊。比如pdf文件的顯示。tree工作區(qū)目錄樹(shù)nbconvert格式轉(zhuǎn)換模塊,可以把Jupyter Notebook轉(zhuǎn)換成html,pdf等格式kernelJupyter Notebook 內(nèi)核servicesJupyter Notebook REST API模塊i18nJupyter Notebook多語(yǔ)言資源3. 安裝Jupyter Notebook

前置條件

Python和pip

不同的Jupyter Notebook對(duì)Python有不同的版本要求。我們安裝的最新的穩(wěn)定版本v6.5.2的Jupyter Notebook,要求Python的最低版本為3.6。注意這個(gè)Python的版本,不同于內(nèi)核的Python版本。對(duì)于Jupyter內(nèi)核來(lái)說(shuō),支持的Python版本和Jupyter Notebook依賴(lài)的Python版本沒(méi)有關(guān)系。

在Linux系統(tǒng)下安裝Jupyter Notebook

js設(shè)置html5禁止橫屏(js怎么阻止頁(yè)面跳轉(zhuǎn))

使用pip安裝Jupyter notebook非常簡(jiǎn)單。如果服務(wù)器同時(shí)擁有Python2和Python3的pip,注意需要使用pip3來(lái)替換命令中的pip。

# 更新pip

pip install --upgrade pip

# 安裝jupyter

pip install jupyter

# 檢查安裝的jupyter

jupyter --version

//輸出 notebook : 6.5.2

4. 配置和啟動(dòng)Jupyter

Jupyter提供了大量的啟動(dòng)參數(shù),用來(lái)配置Jupyter Server。我們可以在啟動(dòng)Jupyter服務(wù)時(shí),通過(guò)命令行參數(shù)的方式配置當(dāng)前啟動(dòng)的服務(wù),但更普遍的方式是使用Jupyter的配置文件。

# 生成配置文件

jupyter notebook --generate-config

// 默認(rèn)生成的配置文件位置:

/root/.jupyter/jupyter_notebook_config.py

# 修改Jupyter配置文件...

# 啟動(dòng)jupyter

jupyter notebook

Jupyter直接使用一個(gè)Python文件來(lái)配置Jupyter服務(wù),所有的配置項(xiàng)均通過(guò)Python代碼來(lái)完成。常用的配置項(xiàng)及其說(shuō)明如下:

名稱(chēng)默認(rèn)值說(shuō)明c.NotebookApp.allow_rootFalse為了安全,Jupyter默認(rèn)不允許使用root用戶啟動(dòng)。如果需要以root用戶的身份啟動(dòng)Jupyter,需要開(kāi)啟此設(shè)定c.NotebookApp.allow_origin''當(dāng)需要Jupyter內(nèi)嵌到iframe時(shí),可以設(shè)置為“*“來(lái)避免跨origin的限制c.NotebookApp.iplocalhost當(dāng)需要通過(guò)外網(wǎng)地址來(lái)訪問(wèn)Jupyter服務(wù)時(shí),需要設(shè)置一個(gè)有效的服務(wù)器IP地址。c.NotebookApp.port8888Jupyter server對(duì)外服務(wù)端口c.NotebookApp.notebook_dir/Jupyter的工作空間,默認(rèn)可以訪問(wèn)服務(wù)器上當(dāng)前用戶的所有文件系統(tǒng)c.NotebookApp.open_browserTrue啟動(dòng)服務(wù)后是否立即通過(guò)瀏覽器打開(kāi)服務(wù)地址c.NotebookApp.default_url/treeJupyter服務(wù)的默認(rèn)地址c.NotebookApp.extra_static_paths[]擴(kuò)展靜態(tài)文件目錄c.NotebookApp.extra_template_paths[]擴(kuò)展模板文件目錄c.KernelSpecManager.allowed_kernelspecsset()默認(rèn)允許使用所有的kernelc.NotebookApp.nbserver_extensions{}允許加載的Jupyter Server擴(kuò)展5. 使用Jupyter

5.1. 創(chuàng)建Notebook

啟動(dòng)Jupyter 后,在瀏覽器內(nèi)輸入 http://服務(wù)器地址:端口/,Jupyter會(huì)默認(rèn)重定向到.default_url指定的工作區(qū)目錄樹(shù)地址,默認(rèn)是工作區(qū)目錄樹(shù)的界面。

如果在訪問(wèn)的過(guò)程中,使用了默認(rèn)的token作為其認(rèn)證方式,那么在首次打開(kāi)時(shí),需要輸入Jupyter Notebook的token值,這個(gè)值可以在啟動(dòng)Jupyter時(shí)的控制臺(tái)輸出中找到,或者使用Jupyter命令來(lái)查詢

# 查詢運(yùn)行的jupyter notebook

jupyter notebook list

//返回結(jié)果中包含了http://x.x.x.x:8899?token=ABC 的信息,其中的ABC就是我們需要的token

圖3 Jupter Notebook的默認(rèn)工作區(qū)目錄樹(shù)頁(yè)面

Jupyter Notebook通過(guò)Jupyter Server提供基于Web的平臺(tái)無(wú)關(guān)的工作方式,這使得跨平臺(tái)開(kāi)發(fā)和協(xié)作,代碼分享等能力變得比傳統(tǒng)IDE更加容易。

在Jupyter 工作區(qū)管理界面,用戶可以靈活地以類(lèi)似文件系統(tǒng)的方式管理工作區(qū)的數(shù)據(jù)??梢詣?chuàng)建文件和文件夾,編輯文件和文件夾,可以上傳和下載文件。通過(guò)選擇一個(gè)Jupyter內(nèi)核,可以創(chuàng)建一個(gè)Notebook文件。

圖4 通過(guò)Jupyter內(nèi)核創(chuàng)建一個(gè)Notebook

5.2. 使用Notebook

使用Python3內(nèi)核創(chuàng)建一個(gè)Notebook后,我們得到一個(gè)xxx.ipynb(IPython Notebook)文件。這個(gè)文件是一個(gè)json格式的文本文件,其中包含了我們?cè)贜otebook中編寫(xiě)的代碼和文本內(nèi)容,也包含了界面上沒(méi)有顯示的元數(shù)據(jù)信息。通過(guò)在工作區(qū)目錄界面選擇一個(gè)notebook文件,點(diǎn)擊編輯,我們可以查看到ipynb文件的原始內(nèi)容。

圖5 ipynb文件的原始內(nèi)容

我們可以像使用其它IDE類(lèi)似的方式來(lái)使用Notebook,在使用Notebook上,我們主要關(guān)注下Jupyter內(nèi)核和單元格。

內(nèi)核是執(zhí)行單元格代碼的核心進(jìn)程,不同的內(nèi)核,決定了我們?cè)趩卧裰心軌蚓帉?xiě)哪些語(yǔ)言的代碼,以及對(duì)應(yīng)了指定的編程語(yǔ)言的哪個(gè)版本等信息。

單元格是整個(gè)Notebook的核心組成部分,我們編寫(xiě)的代碼和文本,通過(guò)一些列Notebook單元格來(lái)組成。Notebook提供了Code,Markdown, Raw NBConvert, Heading四種類(lèi)型的單元格。

?Code單元格。用來(lái)編寫(xiě)內(nèi)核指定語(yǔ)言的程序代碼

?Markdown單元格。使用Markdown編輯器的語(yǔ)法來(lái)編輯富文本

?Raw NBConvert單元格。原始的文本,不會(huì)被當(dāng)作代碼或markdown被解釋執(zhí)行

?Heading單元格。Heading是Mardown的一個(gè)子集,對(duì)應(yīng)了Markdown中的標(biāo)題編寫(xiě)語(yǔ)法

Jupyter Notebook使用了機(jī)器學(xué)習(xí)中檢查點(diǎn)的概念,在我們修改Notebook的過(guò)程中,Jupyter會(huì)自動(dòng)保存我們的修改,我們也可以通過(guò)【文件】-【保存】來(lái)手動(dòng)保存檢查點(diǎn)。檢查點(diǎn)文件包含了我們編寫(xiě)的Notebook內(nèi)容,以及執(zhí)行代碼單元格之后的輸出。我們可以在工作空間的“.ipynb_checkpoints”文件夾下,找到這些檢查點(diǎn)文件。

圖6 使用Jupyter單元格來(lái)編寫(xiě)交互式代碼

5.3. 分享Notebook

相較于使用傳統(tǒng)的IDE編寫(xiě)的代碼,基于Web服務(wù)的Jupyter Notebook在代碼分享上擁有著天然的優(yōu)勢(shì)。

在Jupyter Notebook中,我們可以通過(guò)兩種不同的方式分享我們創(chuàng)作的nootbook。

傳統(tǒng)的技術(shù)文檔或者說(shuō)明書(shū),通過(guò)靜態(tài)的文本,配合圖片和視頻,來(lái)描述和講解特定的技術(shù)或功能。有了Jupyter Notebook后,我們?nèi)匀豢梢允褂肗otebook來(lái)編寫(xiě)類(lèi)似傳統(tǒng)的技術(shù)文檔。在此基礎(chǔ)上,我們可以加入更生動(dòng)的代碼交互單元格,用戶通過(guò)查看文檔說(shuō)明,并與文檔中提供的代碼進(jìn)行互動(dòng),可以更生動(dòng)地介紹產(chǎn)品中的功能和技術(shù)。每個(gè)Jupyter Notebook的ipynb文件,都對(duì)應(yīng)了一個(gè)獨(dú)立的訪問(wèn)地址: http://x.x.x.x:8899/notebooks/my_notebook.ipynb ,通過(guò)分享此文件的地址,其他用戶可以方便地使用包含了富文本和可執(zhí)行的代碼的交互式Notebook文檔。

我們通過(guò)逐步執(zhí)行文檔中的所有單元格,得到一個(gè)包含了我們編寫(xiě)的說(shuō)明和代碼,以及代碼執(zhí)行的輸出結(jié)果的完整文檔。之后點(diǎn)擊【文件】- 【另存為】,選擇一種合適的文件格式。我們可以把文檔導(dǎo)出為一份靜態(tài)文件,通過(guò)共享此靜態(tài)文件,我們實(shí)現(xiàn)了Notebook文檔的離線分享。

5.4. 魔法函數(shù)

Jupyter Notebook提供了一些列魔法函數(shù)來(lái)增強(qiáng)Jupyter Code單元格的功能,通過(guò)魔法函數(shù),我們能夠執(zhí)行javascript腳本,html代碼,運(yùn)行另一個(gè)可執(zhí)行程序等許多額外的功能。

我們可以在Jupyter代碼單元格中使用 %lsmagic命令來(lái)查看所有的魔法函數(shù),如果要閱讀詳細(xì)的魔法函數(shù)的使用說(shuō)明,可以參考: https://ipython.readthedocs.io/en/stable/interactive/magics.html

魔法函數(shù)分為行魔法函數(shù),單元格魔法函數(shù)和會(huì)話魔法函數(shù)。顧名思義,行魔法函數(shù)只對(duì)當(dāng)前行起作用,而單元格魔法函數(shù)則作用于整個(gè)單元格,會(huì)話魔法函數(shù)則作用于整個(gè)會(huì)話期間。

一些常用的魔法函數(shù):

指令說(shuō)明%matplotlib設(shè)置matplot繪圖的顯示模式%%javascript單元格內(nèi)的代碼被識(shí)別為javascript代碼%%html單元格內(nèi)的代碼被識(shí)別為html代碼%run執(zhí)行外部腳本文件%pwd獲取當(dāng)前工作的目錄位置(非工作空間目錄位置)%writefile以文件形式保存當(dāng)前單元格代碼%timeit獲取本行代碼的執(zhí)行時(shí)間%debug激活調(diào)試模式6. 管理Jupyter

6.1. 多語(yǔ)言

Jupyter Notebook使用i18n目錄下的資源來(lái)進(jìn)行多語(yǔ)言翻譯。在Jupyter Notebook啟動(dòng)時(shí),會(huì)加載i18n目錄下的多語(yǔ)言資源。之后根據(jù)http請(qǐng)求指定的語(yǔ)言,為響應(yīng)數(shù)據(jù)提供對(duì)應(yīng)的多語(yǔ)言翻譯。如果沒(méi)有對(duì)應(yīng)的翻譯,則保留原始的多語(yǔ)言標(biāo)簽值(英文)。如果調(diào)整了多語(yǔ)言翻譯,需要重新啟動(dòng)Jupyter Notebook才能使用新的語(yǔ)言包。

Jupyter Notebook的翻譯資源主要分布在三個(gè)po文件中:

?nbjs.po - js文件中的多語(yǔ)言數(shù)據(jù)

?nbui.po - UI界面中的多語(yǔ)言數(shù)據(jù)

?notebook.po - notebook中的多語(yǔ)言數(shù)據(jù)

原始的po文件,需要通過(guò)pybabel工具,把po文件編譯成mo文件,之后部署在notebook/i18n/{LANG}/LC_MESSAGES/目錄下($notebook是notebook的安裝目錄),才能在Jupyter Notebook中作為多語(yǔ)言的資源包來(lái)使用。

# 使用pybabel編譯多語(yǔ)言po文件

pybabel compile -D notebook -f -l ${LANG} -i ${LANG}/LC_MESSAGES/notebook.po -o ${LANG}/LC_MESSAGES/notebook.mo

pybabel compile -D nbui -f -l ${LANG} -i ${LANG}/LC_MESSAGES/nbui.po -o ${LANG}/LC_MESSAGES/nbui.mo

pybabel compile -D nbjs -f -l ${LANG} -i ${LANG}/LC_MESSAGES/nbjs.po -o ${LANG}/LC_MESSAGES/nbjs.mo

圖7 使用了中文語(yǔ)言包后的中文Notebook界面

6.2. 內(nèi)核管理

內(nèi)核(kernel)是獨(dú)立于jupyter服務(wù)和界面之外的用來(lái)運(yùn)行Jupyter代碼單元格的進(jìn)程,Jupyter默認(rèn)提供了ipykernel內(nèi)核來(lái)支持Python開(kāi)發(fā)語(yǔ)言。Jupyter社區(qū)提供了jupyterC, IJava,xeus-cling, xeus-sql等眾多其它編程語(yǔ)言的內(nèi)核,用來(lái)支持C/C++, Java, SQL等編程語(yǔ)言。

ipykernel默認(rèn)使用系統(tǒng)環(huán)境下的Python來(lái)提供服務(wù)。我們可以使用ipykernel安裝多個(gè)Python kernel來(lái)提供Python2.x, Python3.x等多個(gè)Python內(nèi)核環(huán)境。

安裝kernel后,kernel的信息被保存在kernel.json文件中,我們可以在 /usr/local/share/jupyter/kernels 目錄,找到Jupyter安裝的所有kernel以及對(duì)應(yīng)的kernel.json文件。

kernel可以直接繼承自安裝kernel的Python指令,也可以使用Python虛擬環(huán)境。

# 1.直接繼承自Python指令的kernel安裝

# 安裝ipykernel

pip install ipykernel

# 安裝kernel

python -m ipykernel install --name tensorflow2 --display-name "tensorflow2"

# 2. 在Python虛擬環(huán)境下的kernel安裝

# 激活虛擬環(huán)境

source activate myenv

# 安裝ipykernel

pip install ipykernel

# 安裝kernel

python -m ipykernel install --name myenv --display-name "Python3 (myenv)"

如果需要查看當(dāng)前的kernel列表,以及刪除已經(jīng)安裝的kernel,可以使用如下的Jupyter命令:

# 查看已經(jīng)安裝的kernel列表

jupyter kernelspec list

# 刪除列表中指定的kernel

jupyter kernelspec remove kernelname

6.3. REST API

Jupyter提供了REST API接口來(lái)和Jupyter server進(jìn)行交互。借助REST API的能力,我們可以以編程的方式和Jupyter Server進(jìn)行交互,靈活地管理Jupyter Server。另外REST API為現(xiàn)代化的軟件開(kāi)發(fā)提供了一個(gè)優(yōu)秀的能力:自動(dòng)化。

借助Jupyter Notebook REST API,可以實(shí)現(xiàn)文件的上傳和下載,檢查點(diǎn)管理,會(huì)話管理,內(nèi)核管理,終端管理等一些列管理能力。完整的Jupyter REST API接口列表可以參考: https://jupyter-server.readthedocs.io/en/latest/developers/rest-api.html

要使用REST API,需要在請(qǐng)求中攜帶認(rèn)證信息。Jupyter支持直接把token作為query string的方式來(lái)認(rèn)證,也可以使用標(biāo)準(zhǔn)的Http Authorization頭信息來(lái)完成認(rèn)證。使用Authorization頭來(lái)認(rèn)證的格式如下:

Authrozation: token 527a9f1430ccfed995ebcf15517583a2547c2469bc3c47a6

圖8 使用Postman來(lái)調(diào)用Jupyter REST API接口

6.4. 安全管理與多人協(xié)作

Jupyter提供了靈活強(qiáng)大的能力,用以支持在線的交互式文檔和代碼的編寫(xiě)。但Jupyter項(xiàng)目自身沒(méi)有提供精細(xì)化的安全管理體系,用以支持多用戶下靈活地使用Jupyter Notebook的功能。對(duì)于文件安全,Jupyter依賴(lài)于啟動(dòng)服務(wù)的linux用戶,合理地配置啟動(dòng)Jupyter的用戶的權(quán)限,才能保證使用Jupyter的用戶,不會(huì)對(duì)系統(tǒng)或項(xiàng)目造成破壞。Jupyter工作空間的設(shè)定,僅起到了方便Jupyter使用者管理必要文件的易用性,不能阻擋用戶訪問(wèn)和管理工作空間外的文件系統(tǒng)。另外,配合使用Python虛擬環(huán)境,可以防止Jupyter Notebook提供的 pip install ,pip uninstall功能,對(duì)現(xiàn)有項(xiàng)目環(huán)境造成破壞。

在多人協(xié)作方面,JupyterHub項(xiàng)目提供了多人協(xié)作Jupyter Notebook和Jupyter lab開(kāi)發(fā)的能力。使用JupyterHub,不同職能的用戶可以在自己獨(dú)立的空間內(nèi)進(jìn)行Notebook的編寫(xiě)工作,不同用戶間也可以方便地分享各自的Notebook。

7. 擴(kuò)展Jupyter

7.1. 前端擴(kuò)展

Jupyter Notebook前端擴(kuò)展(front end extension)是使用Javascript語(yǔ)言編寫(xiě)的異步模塊,可以用來(lái)繪制Jupyter界面的儀表盤(pán),Notebook,工具欄等,。定義一個(gè)前端擴(kuò)展必須要實(shí)現(xiàn)一個(gè)load_ipython_extension方法,當(dāng)前端控件被加載時(shí),Jupyter client會(huì)調(diào)用load_ipython_extension方法。

Jupyter Notebook前端擴(kuò)展能力目前還不是一個(gè)穩(wěn)定的版本,不保證代碼能夠向后兼容。Jupyter的JS API目前也沒(méi)有官方的文檔,需要通過(guò)源代碼或者實(shí)際加載的JS來(lái)查看Jupyter前端腳本的成員和方法。

我們實(shí)現(xiàn)一個(gè)簡(jiǎn)單的前端擴(kuò)展腳本,在jupyter前端的工具條中,添加一個(gè)自定義工具,當(dāng)點(diǎn)擊自定義工具時(shí),彈出提示信息。

define([

'base/js/namespace'

], function(

Jupyter

) {

function load_ipython_extension() {

var handler = function () {

alert('歡迎使用前端擴(kuò)展!');

};

var action = {

icon: 'fa-comment-o',

help : '前端擴(kuò)展',

help_index : 'zz',

handler : handler

};

var prefix = 'my_extension';

var action_name = 'show-alert';

var full_action_name = Jupyter.actions.register(action, action_name, prefix); // returns 'my_extension:show-alert'

Jupyter.toolbar.add_buttons_group([full_action_name]);

}

return {

load_ipython_extension: load_ipython_extension

};

});

完前端擴(kuò)展代碼后,我們把腳本保存到main.js文件,放置在/opt/my_extension目錄下。接下來(lái)我們使用jupyter nbextension工具來(lái)安裝和啟用前端擴(kuò)展

# 安裝前端擴(kuò)展

jupyter nbextension install /opt/my_extension

# 啟用前端擴(kuò)展

jupyter nbextension enable my_extension/main

# 禁用前端擴(kuò)展

jupyter nbextension disable my_extension/main

# 查看前端擴(kuò)展列表

jupyter nbextension list

# 卸載前端擴(kuò)展

jupyter nbextension uninstall my_extension

圖9 在Notebook工具條中加入的前端擴(kuò)展

7.2. 服務(wù)端擴(kuò)展

Jupyter服務(wù)端擴(kuò)展(server extension)是使用Python語(yǔ)言編寫(xiě)的模塊,可以用來(lái)處理發(fā)送到Jupyter Server的Http請(qǐng)求。使用Jupyter服務(wù)端擴(kuò)展,可以更改現(xiàn)有Jupyter請(qǐng)求的數(shù)據(jù)和行為,也可以為jupyter Server定義新的服務(wù)處理程序。

定義一個(gè)服務(wù)端擴(kuò)展模塊要實(shí)現(xiàn)一個(gè)load_jupyter_server_extension方法,其中包含一個(gè)類(lèi)型為notebook.notebookapp.NotebookApp的參數(shù)serverapp,serverapp的詳細(xì)屬性和方法可以通過(guò)Jupyter Notebook源代碼中的notebookapp.py文件來(lái)查看。當(dāng)服務(wù)端擴(kuò)展被加載時(shí),Jupyter Server會(huì)調(diào)用load_jupyter_server_extension方法。在load_jupyter_server_extension方法中,我們可以通過(guò)調(diào)用serverapp的web_app屬性的add_handlers方法來(lái)注冊(cè)處理程序,用來(lái)處理特定的服務(wù)端請(qǐng)求。處理程序類(lèi)需要繼承自Jupyter的IPythonHandler類(lèi)。在處理程序的方法中,可以使用Jupyter提供的@web.authenticated裝飾器來(lái)為方法增加身份認(rèn)證保護(hù)。

通過(guò)服務(wù)端擴(kuò)展,還可以與前端擴(kuò)展聯(lián)動(dòng),實(shí)現(xiàn)一個(gè)功能豐富的Jupyter Notebook前端控件。

# 定義一個(gè)處理程序

from tornado import (

gen, web,

from notebook.base.handlers import IPythonHandler

class HelloWorldHandler(IPythonHandler):

@web.authenticated

@gen.coroutine

def get(self):

self.finish(f'Hello, world!')

# 實(shí)現(xiàn)load_jupyter_server_extension方法并注冊(cè)處理程序

def load_jupyter_server_extension(serverapp):

handlers = [

('/myextension/hello', HelloWorldHandler)

]

serverapp.web_app.add_handlers('.*$', handlers)

完成服務(wù)端擴(kuò)展代碼后,我們把代碼保存為_(kāi)_init__.py文件,要在Jupyter Notebook中使用處理程序,我們還需要進(jìn)行服務(wù)端擴(kuò)展的安裝和啟用。不同于前端擴(kuò)展,服務(wù)端擴(kuò)展不能直接使用指令來(lái)安裝,需要我們手動(dòng)編寫(xiě)安裝程序。此外,Jupyter提供了自動(dòng)啟用服務(wù)端擴(kuò)展和前端擴(kuò)展的方法,需要我們?cè)谀_本的根目錄提供啟用擴(kuò)展的配置文件。

jupyter-config/

├── jupyter_notebook_config.d/

│ └── my_server_extension.json

└── nbconfig/

└── notebook.d/

└── my_front_extension.json

setup.py

加入了自動(dòng)啟用擴(kuò)展的配置,我們的服務(wù)端擴(kuò)展目錄結(jié)構(gòu)如下:

hello-extension/

├── __init__.py

jupyter-config/

├── jupyter_notebook_config.d/

└── hello_extension.json

hello_extension.json文件的內(nèi)容為:

{

"ServerApp": {

"jpserver_extensions": {

"hello_extension": true

}

}

}

接下來(lái)我們通過(guò)安裝程序,安裝服務(wù)端擴(kuò)展的信息保存在/root/.jupyter/jupyter_notebook_config.json文件中。在安裝完成后,我們可以通過(guò)jupyter serverextesion工具來(lái)股那里服務(wù)端擴(kuò)展

# 啟用服務(wù)端擴(kuò)展

jupyter serverextension enable hello_extension

# 禁用服務(wù)端擴(kuò)展

jupyter serverextension disable hello_extension

# 服務(wù)端擴(kuò)展直接卸載的方法,需要我們通過(guò)pip uninstall 卸載安裝程序,

# 再通過(guò)手工修改/root/.jupyter/jupyter_notebook_config.json文件刪除擴(kuò)展信息來(lái)完成卸載

圖10 在瀏覽器中測(cè)試安裝的服務(wù)端擴(kuò)展程序

7.3. 界面定制

Jupyter沒(méi)有提供標(biāo)準(zhǔn)的界面定制的能力,但我們可以手工調(diào)整jupyter生成的模板視圖文件和樣式文件,達(dá)到整條調(diào)整jupyter notebook的界面的能力。

Jupyter Notebook模板文件的位置為:$notebook/templates,樣式和腳本定制推薦的方案是使用~/.jupyter/custom/custom.css和~/.jupyter/custom/custom.js文件。我們可以直接在此基礎(chǔ)上對(duì)文件進(jìn)行修改,還可以通過(guò)extra_template_paths和extra_static_paths來(lái)引入其它位置的模板和其它靜態(tài)文件。

圖11 通過(guò)直接調(diào)整模板文件加入的界面定制按鈕

7.4. 小部件

小部件(Widgets)是Jupyter交互式可視化數(shù)據(jù)呈現(xiàn)部件。Jupyter Widgets同時(shí)包含了訪問(wèn)后端數(shù)據(jù)和前端呈現(xiàn)的能力,可以用于在Jupyter Notebook上生動(dòng)地展示服務(wù)端的數(shù)據(jù)和數(shù)據(jù)變化。

在v6.5.2穩(wěn)定版本上,我們目前只能使用系統(tǒng)提供的小部件,還不能開(kāi)發(fā)自定義小部件。在Jupyter notebook7.x版本中,開(kāi)始提供了小部件的自定義開(kāi)發(fā)能力。

# 確保安裝了ipywidgets和traitlets

pip install --upgrade traitlets

pip install --upgrade ipywidgets

# 安裝和啟用小部件

jupyter nbextension install --py widgetsnbextension

jupyter nbextension enable --py widgetsnbextension

在安裝和啟用了小部件后,我們可以在notebook中直接使用系統(tǒng)提供的小部件。

圖12 在Notebook中使用小部件

完整的小部件列表和使用方式可以參考: https://ipywidgets.readthedocs.io/en/7.x/examples/Widget%20List.html

8. 總結(jié)

Jupyter Notebook以其豐富的功能,簡(jiǎn)單易用,強(qiáng)大的交互能力和擴(kuò)展能力,成為數(shù)據(jù)科學(xué)和機(jī)器學(xué)習(xí)開(kāi)發(fā)中的神器。目前,Jupyter Notebook支持超過(guò)40種編程語(yǔ)言,被應(yīng)用于Google Colab, Kubeflow, 華為云,kaggle等多個(gè)知名項(xiàng)目中,大量機(jī)器學(xué)習(xí)和數(shù)據(jù)科學(xué)的論文中使用到了Jupyter。Jupyter在數(shù)據(jù)可視化,提升工作效率,改善用戶體驗(yàn)和豐富文檔功能方面顯現(xiàn)了巨大的威力。除此之外,Jupyter還提供的靈活強(qiáng)大的擴(kuò)展能力,更是為Jupyter的深層次使用提供了更廣闊的想象空間。如果你還沒(méi)有開(kāi)始接觸Jupyter,那么就從現(xiàn)在開(kāi)始吧。

掃描二維碼推送至手機(jī)訪問(wèn)。

版權(quán)聲明:本文由飛速云SEO網(wǎng)絡(luò)優(yōu)化推廣發(fā)布,如需轉(zhuǎn)載請(qǐng)注明出處。

本文鏈接:http://m.smallwaterjetsystem.com/post/107593.html

“js設(shè)置html5禁止橫屏(js怎么阻止頁(yè)面跳轉(zhuǎn))” 的相關(guān)文章

專(zhuān)業(yè)網(wǎng)站優(yōu)化的簡(jiǎn)單介紹

專(zhuān)業(yè)網(wǎng)站優(yōu)化的簡(jiǎn)單介紹

今天給各位分享專(zhuān)業(yè)網(wǎng)站優(yōu)化的知識(shí),其中也會(huì)對(duì)進(jìn)行解釋?zhuān)绻芘銮山鉀Q你現(xiàn)在面臨的問(wèn)題,別忘了關(guān)注本站,現(xiàn)在開(kāi)始吧!本文目錄一覽: 1、網(wǎng)站優(yōu)化基礎(chǔ)技巧有哪些 2、網(wǎng)站優(yōu)化有什么好辦法? 3、專(zhuān)業(yè)的網(wǎng)站優(yōu)化是怎么做?像營(yíng)銷(xiāo)型網(wǎng)站。 4、網(wǎng)站優(yōu)化的方法有哪些? 5、專(zhuān)業(yè)網(wǎng)站優(yōu)化公司有哪些...

蘇州網(wǎng)站建設(shè)的簡(jiǎn)單介紹

蘇州網(wǎng)站建設(shè)的簡(jiǎn)單介紹

本篇文章給大家談?wù)勌K州網(wǎng)站建設(shè),以及對(duì)應(yīng)的知識(shí)點(diǎn),希望對(duì)各位有所幫助,不要忘了收藏本站喔。 本文目錄一覽: 1、蘇州網(wǎng)站建設(shè)最好的哪家?是在滄浪區(qū)還是園區(qū)的? 2、蘇州網(wǎng)站建設(shè)哪家網(wǎng)絡(luò)公司做的比較好? 3、蘇州網(wǎng)站優(yōu)化找哪家 蘇州網(wǎng)站建設(shè)最好的哪家?是在滄浪區(qū)還是園區(qū)的? 沒(méi)有最好,只有更...

小程序制作一個(gè)需要多少錢(qián)(小程序制作一個(gè)需要多少錢(qián)作一個(gè)需要多少錢(qián))

小程序制作一個(gè)需要多少錢(qián)(小程序制作一個(gè)需要多少錢(qián)作一個(gè)需要多少錢(qián))

本篇文章給大家談?wù)勑〕绦蛑谱饕粋€(gè)需要多少錢(qián),以及小程序制作一個(gè)需要多少錢(qián)作一個(gè)需要多少錢(qián)對(duì)應(yīng)的知識(shí)點(diǎn),希望對(duì)各位有所幫助,不要忘了收藏本站喔。 本文目錄一覽: 1、微信小程序開(kāi)發(fā)一個(gè)多少錢(qián) 2、微信小程序開(kāi)發(fā)多少錢(qián)做一個(gè)? 3、微信小程序開(kāi)發(fā)一般需要多少錢(qián)呢 4、做一個(gè)小程序需要多少費(fèi)用...

2022年北京冬奧會(huì)報(bào)紙(隨著2022年北京冬奧會(huì)的日益臨近)

2022年北京冬奧會(huì)報(bào)紙(隨著2022年北京冬奧會(huì)的日益臨近)

本篇文章給大家談?wù)?022年北京冬奧會(huì)報(bào)紙,以及隨著2022年北京冬奧會(huì)的日益臨近對(duì)應(yīng)的知識(shí)點(diǎn),希望對(duì)各位有所幫助,不要忘了收藏本站喔。 本文目錄一覽: 1、2022年冬奧會(huì)標(biāo)志是什么? 2、2022北京冬奧會(huì)的主題是什么? 3、2022年冬奧會(huì)在中國(guó)北京舉行,關(guān)于冬奧會(huì)的科普你知道多少?...

零花錢(qián)怎么用活動(dòng)設(shè)計(jì)(零花錢(qián)活動(dòng)設(shè)計(jì)方案)

零花錢(qián)怎么用活動(dòng)設(shè)計(jì)(零花錢(qián)活動(dòng)設(shè)計(jì)方案)

今天給各位分享零花錢(qián)怎么用活動(dòng)設(shè)計(jì)的知識(shí),其中也會(huì)對(duì)零花錢(qián)活動(dòng)設(shè)計(jì)方案進(jìn)行解釋?zhuān)绻芘銮山鉀Q你現(xiàn)在面臨的問(wèn)題,別忘了關(guān)注本站,現(xiàn)在開(kāi)始吧!本文目錄一覽: 1、小學(xué)綜合實(shí)踐課 《零用錢(qián)該怎么花》課堂實(shí)錄 ,急,要詳細(xì)些的。 2、話題討論 零用錢(qián)怎么花 3、以如何使用零花錢(qián)制定一份計(jì)劃 4...

三年級(jí)上冊(cè)英語(yǔ)ppt課件免費(fèi)下載譯林版(譯林版三年級(jí)上冊(cè)英語(yǔ)PPT)

三年級(jí)上冊(cè)英語(yǔ)ppt課件免費(fèi)下載譯林版(譯林版三年級(jí)上冊(cè)英語(yǔ)PPT)

今天給各位分享三年級(jí)上冊(cè)英語(yǔ)ppt課件免費(fèi)下載譯林版的知識(shí),其中也會(huì)對(duì)譯林版三年級(jí)上冊(cè)英語(yǔ)PPT進(jìn)行解釋?zhuān)绻芘銮山鉀Q你現(xiàn)在面臨的問(wèn)題,別忘了關(guān)注本站,現(xiàn)在開(kāi)始吧!本文目錄一覽: 1、誰(shuí)有譯林版小學(xué)三年級(jí)上冊(cè)英語(yǔ) 第三單元第一課時(shí) My friends 的說(shuō)課稿 2、哪里有小學(xué)三年級(jí)上冊(cè)(三年...