遠程jupyter+pycharm配置 (一)之安裝與使用技巧


前言

作為一個數據工程師,最喜歡的事情就是不停的在現實的服務端環境調試代碼的參數。我們在本地的環境與生產的狀況決然不同,我們一開始在本地寫代碼測試再部署到服務端的三板斧就不適用了。

 

最好的方式可以直接在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 由JuliaPython 和 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 選項卡:

勾選disable configuration for nbextensions without explicit compatibility (they may break your notebook environment, but can be useful to show for nbextension development),否則下方插件是不可選狀態。

 

 

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM