前言
作為一個數據工程師,最喜歡的事情就是不停的在現實的服務端環境調試代碼的參數。我們在本地的環境與生產的狀況決然不同,我們一開始在本地寫代碼測試再部署到服務端的三板斧就不適用了。
最好的方式可以直接在linux環境下的服務端直接寫代碼,分步調試。之前我在銀行都是使用集成在CDSW的環境IDE,但是如今我們需要自己拼湊一個可用類似的工具。
這樣我們就要用到遠程jupyter,即服務端提供jupyter server,而我們只需要直接在本地環境直接使用server暴露的web接口上直接寫代碼,分步調試運行測試即可。
作為一個僅僅做數據的開發人員,我更喜歡使用pycharm的源碼查看,跳轉等功能。所以最終我們需要的是一個遠程jupyter+pycharm配置的IDE工具。本篇文章就是搭建一個如此好用的神兵利器的博客說明書。
什么是Jupyter notebook?
Jupyter notebook
是一種 Web 應用,基於網頁的用於交互計算的應用程序,可用於全過程計算:開發、文檔編寫、運行代碼和展示結果。
以前又稱為IPython notebook,是一個交互式筆記本, 支持運行40+種編程語言. 可以用來編寫漂亮的交互式文檔
Jupyter notebook
特別適合做數據處理,其用途可以包括數據清理和探索、可視化、機器學習和大數據分析,源於 Fernando Perez 發起的 IPython
項目。
IPython 是一種交互式 shell,與普通的 Python shell 相似,但具有一些更高級的功能,例如語法高亮顯示和代碼補全,還有一些 magic 操作,十分方便。Jupyter notebook 將 IPython 做成了一種 Web 應用,它的基本架構如下:
這里的核心是 notebook server,用戶通過瀏覽器連接到該服務器,而 notebook 呈現為 Web 應用。
用戶在 Web 應用中編寫的代碼通過該服務器發送給內核,內核運行代碼,並將結果發送回該服務器。然后,任何輸出都會返回到瀏覽器中。保存 notebook 時,它將作為 JSON
文件(文件擴展名為 .ipynb
)寫入到該服務器中。
此架構的一個優點是,內核無需運行 Python。由於 notebook 和內核分開,因此可以在兩者之間發送任何語言的代碼。
例如,早期的兩個非 Python 內核分別是 R 語言和 Julia 語言。使用 R 內核時,用 R 編寫的代碼將發送給執行該代碼的 R 內核,這與在 Python 內核上運行 Python 代碼完全一樣。
IPython notebook 已被改名,因為 notebook 變得與編程語言無關。新的名稱 Jupyter 由Julia
、Python
和 R
組合而成。
servers:jupyterhub 需要登錄的多用戶筆記本
tmpnb 不需要登錄的臨時筆記本
nbgrader 作為任務創建和分級的筆記本
nbviewer 網站筆記本的HTML視圖
Applications: nbconvert 將筆記本文件轉換為其他格式
notebook Jupyter notebook 應用相當於Django的app
qtconcle 控制應用
jupyter_consle Jupyter 終端應用
API:nbformat ipython 文件下載,保存,格式版本遷移和信托
jupyter_client
jupyter_core jupyter命令,配置文件和文件系統位置
Kernerl : ipywidgets 交互組件
ipython python代碼執行,魔法語法和ipython終端交互
ipykernel 內核通訊協議
traitlets 所有依賴:配置系統和小部件基礎層
1.安裝指南:
1.安裝jupyter
我們已經安裝anaconda環境,conda activate user后 直接執行如下命令
conda install jupyter
安裝成功后按如下步驟:
1. 前置條件:一個配置文件
第一步就生成配置文件 jupyter_notebook_config.py
jupyter notebook --generate-config
如果是root 用戶執行時需要加上 --allow-root
選項
jupyter notebook --generate-config --allow-config
2. 生成密碼
bash生成
jupyter notebook password Enter password: xxxx Verify password: xxxx [NotebookPasswordApp] Wrote hashed password to /home/rdev/jupyter/jupyter_notebook_config.json
也可以python環境下生成
>from notebook.auth import passwd >passwd() Enter password:xxxxx Verify password:xxxxx res: 'sha1:xxxx:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
passwd()
方法在沒有傳入參數時候,會如上所示提示輸入和驗證密碼,它也可以傳入一個字符串作為密碼,即 passwd('12345')
,但不建議這種做法,因為本來輸入命令都會被保存起來,直接輸入密碼,相當於密碼以明文方式保存在輸入歷史。
3.添加到配置文件
將哈希密碼添加到配置文件 jupyter_notebook_config.py
# ip 設置為 * c.NotebookApp.ip = '*' # 密碼 設置為 sha1 c.NotebookApp.password = u'sha1:xxxxx:xxxxxxxxxxx<your hashed password here>' # 瀏覽器設置不打開 c.NotebookApp.open_browser = False # 設置一個固定的接口 c.NotebookApp.port = 8888
1.官方教程是建議 c.NotebookApp.ip
設置為 *
,但實際上這樣操作可能會連接失敗,所以可以選擇設置為 0.0.0.1
或者就是服務器的 IP
2.服務器端口默認為80,但是80端口基本都會被占用建議設置8888或者8899等等
4.采用 SSL 加密通信(可選)
采用密碼的同時使用帶有網站證書的 SSL ,可以避免哈希的密碼被非加密的形式發送給瀏覽器。
但是一般運維人員會只暴露服務器端口給公司的網段,所以這一項是可選項。
可以是先使用openssl命令生成ssl證書和key
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout sslkey.key -out sslcert.pem
再修改配置文件:
# 證書的信息 c.NotebookApp.certfile = u'/home/rdev/sslcert.pem' c.NotebookApp.keyfile = u'/home/rdev/sslkey.key'
4.啟動jupyter
啟動的時候就可以不帶后面的參數
1.帶參數
jupyter notebook
2.不帶參數
jupyter notebook --certfile=sslcert.pem --keyfile sslkey.key
2.pycharm集合jupyter
建立項目后,創建ipynb文件,選擇相應的服務器地址,端口為8888 token就是登入密碼
3.jupyter Notebook 擴展工具
如果沒有安裝插件管理器,打開jupyter notebook后菜單欄只有如下3項,
- Files
- Running
- Clusters
我們需要安裝插件管理器來管理我們需要的插件,
第一步:用conda安裝插件管理包
conda install -c conda-forge jupyter_contrib_nbextensions
conda install -c conda-forge jupyter_nbextensions_configurator
並導航至新的 Nbextensions 選項卡:

5款NB 的插件。
- Table of Contents
- Execute Time
- Nofity
- Codefolding
- Hinterland
1.Table of Contents:使用鏈接Table of Contents 的方式追蹤定位所有單元格
2.Autopep8:規范化代碼
3.variable inspector:顯示你在 notebook 中創建的所有變量的名稱,以及它們的類型、大小、形狀和值。
4.ExecuteTime:顯示單元格的運行時間和耗時
不過我感覺都不如pycharm香!!!!
4.快捷鍵:
紅框里是綠色時,為編輯模式,在命令模式時按 Enter 會進入編輯模式;
紅框里是藍色時,為命令模式,在編輯模式時按 ESC 會進入命令模式;
通用模式(編輯模式與命令模式均可)快捷鍵:
-
調出控制面板:Ctrl + Shift + P
-
運行當前單元格,選中下方單元格:Shift + Enter
-
運行當前單元格:Ctrl + Enter
-
運行當前單元格,在下方插入新單元格:Alt + Enter
-
保存 ipynb 文件:Ctrl + S
編輯模式快捷鍵:
-
切換為命令模式:ESC
-
在光標處分割單元格:Ctrl + Shift + 減號
-
光標挪至行首或行尾:Alt + ←或→
-
按單詞挪動光標:Ctrl + ←或→
-
縮進:TAB
-
取消縮進:Shift + TAB
-
刪除光標前的整個單詞:Ctrl + Backspace
-
刪除光標后的整個單詞:Ctrl + Delete
-
顯示函數提示:Shift + TAB,按一次顯示簡略信息,按兩次顯示詳細信息,按三次 10 秒內固定顯示,按四次,函數信息固定顯示在界面下方。
-
移動到上一個單元格:↑
-
移動到下一個單元格:↓
-
復制光標所在整行:Ctrl + C,注:不要選擇任何內容
-
剪切光標所在整行:Ctrl + X,注:不要選擇任何內容
-
其它復制、剪切、黏貼、重做、取消等快捷鍵與 Windows 標准快捷鍵一樣。
命令模式快捷鍵:
-
切換為編輯模式:Enter
-
選中單元格改為代碼格式:Y
-
選中單元格改為 Markdown 格式:M
-
選中單元格改為原生格式:R
-
當前單元格上方插入單元格:A
-
當前單元格下方插入單元格:B
-
刪除選中單元格:DD,即連續按兩次 D 鍵
-
恢復刪除的單元格:Z
-
復制選中單元格:C
-
剪切選中單元格:X
-
黏貼選中單元格:V
-
查找與替換內容:F
-
隱藏 / 顯示輸出內容:O
-
隱藏 / 顯示代碼行號:L
-
擴展選擇當前單元格上方單元格:Shift + ↑
-
擴展選擇當前單元格下方單元格:Shift + ↓
-
合並多個單元格:Shift + M
- 重啟內核:00,即連續按兩次
零
5.像數據科學家一樣使用notebook
如何用notebook做一個綜合代碼,數據,ppt和excel以及pdf的數據報告
Qgrid
Qgrid也是一個Jupyter的小部件,不過它主要用於數據幀,裝上之后,就可以像操作Excel里的篩選功能一樣,方便的處理數據。
# only required if you have not added conda-forge to your channels yet conda config --add channels conda-forge conda install qgrid
使用:
import qgrid excel_grid=qgrid.show_grid(df.head(20),show_toolbar=True) excel_grid
# pip pip install ipywidgets jupyter nbextension enable --py widgetsnbextension # Conda conda install -c conda-forge ipywidgets #Installing ipywidgets with conda automatically enables the extension