概要
本文主要介紹Jupyter Notebook的開發(fā)環(huán)境。包括以下內(nèi)容:
- Jupyter Notebook C++ kernel安裝
- Jupyter Notebook Python kernel和C++ Kernel連接遠(yuǎn)程服務(wù)器
- 記錄Jupyter下的一些小技巧,包括Python和Linux之間的交互等
- 一些有趣的擴(kuò)展Jupyter
第一部分:C++ Kernel的安裝與體驗(yàn)
Ubuntu下安裝:
我當(dāng)時(shí)安裝直接按照 xeus-cling 官網(wǎng)上的安裝教程裝的,裝完直接可以用。
小問(wèn)題:該安裝似乎只支持conda下安裝。之前我用python都是用的pip。故需要單獨(dú)安裝一個(gè)miniconda來(lái)創(chuàng)建安裝xeus-cling的conda環(huán)境。裝好了之后記得把該conda安裝路徑添加至環(huán)境變量
export PATH="/home/xxx/miniconda3/bin:$PATH"
(吐槽一下,這里我每次用python的時(shí)候就把環(huán)境變量里這句話注釋掉,用C++kernel時(shí)就加上這句...如果有大神有好的方法,希望不吝賜教~)
另外,在終端下也可以考慮使用cling,一款交互式的C++工具。
2.使用體驗(yàn):
- 首先,作為一個(gè)初學(xué)者,使用jupyter學(xué)習(xí)C++最大的好處就是不需要每個(gè)腳本都重復(fù)寫include以及其他語(yǔ)法內(nèi)容了(之前都是直接使用的是g++,還沒(méi)用過(guò)IDE..)。另外打印變量非常方便,不需要每次運(yùn)行都要編譯腳本。
- 缺陷:
- 沒(méi)有類似python中del命令可以清除已經(jīng)定義過(guò)的變量...所以重復(fù)定義相同變量時(shí)會(huì)報(bào)錯(cuò)。Github上有人說(shuō)到一個(gè)reset命令,但是我試了并沒(méi)有效果...如果大家發(fā)現(xiàn)這個(gè)問(wèn)題有更好的解決辦法,記得告訴我哈哈~
- 暫時(shí)還不知道jupyter下寫的C++腳本怎么和外面的環(huán)境交互。比如cin命令咋用...
- 補(bǔ)全功能不是很好用,尤其是有時(shí)候補(bǔ)全函數(shù)名的時(shí)候,會(huì)導(dǎo)致kernel掛掉...
第二部分:Jupyter 連接遠(yuǎn)程服務(wù)器
- Python Kernel
正常使用Python連接遠(yuǎn)程服務(wù)器是比較容易的,可以參考諸如http://www.itdecent.cn/p/4012f7149eb8?from=timeline
等連接。
- 注意在ipython中設(shè)置密碼時(shí)不要設(shè)成空格就行。
- C++ Kernel
如果要使用安裝過(guò)C++Kernel的jupyter連接服務(wù)器,可能會(huì)遇到一些小麻煩。
直接連的話可能會(huì)報(bào)錯(cuò):類似
File “/home/paperspace/anaconda3/envs/fastai/lib/python3.6/site-packages/traitlets/traitlets.py”, line 528, in get
value = obj._trait_values[self.name]
KeyError: ‘a(chǎn)llow_remote_access’
下面還有一大堆。Google了下找了個(gè)對(duì)我自己可行的解決方法:
① 在~/.jupyter/jupyter_notebook_config.py 中加入一行:
c.NotebookApp.allow_remote_access = True
(也有人說(shuō)=False。不過(guò)我用True可以連接上)。
②登錄ssh時(shí),用下面的方式:
ssh xxx@123.123.123.123 -L 8888:localhost:8888
注意兩個(gè)8888改成自己設(shè)置的port,ip地址改成自己服務(wù)器的ip地址。
參考:
https://forums.fast.ai/t/error-while-trying-to-open-jupyter-notebook-in-paperspace/22634

第三部分:Jupyter下的小技巧
一些個(gè)人經(jīng)常用到的小技巧~,歡迎大家補(bǔ)充
①在用到的函數(shù)括號(hào)里面按Shift+Tab可以快速獲取當(dāng)前函數(shù)的說(shuō)明文檔。對(duì)于了解函數(shù)所需參數(shù)非常方便。
②??
??可以用來(lái)獲取某個(gè)函數(shù)的源碼。如在cell中運(yùn)行下面的命令:
gluon.model_zoo.vision?? 會(huì)彈出vision相關(guān)源代碼
③%matplotlib notebook可用來(lái)繪制動(dòng)態(tài)圖
④通過(guò)在句首加!,可以運(yùn)行shell命令,(win下也可以運(yùn)行一些支持的dos命令)如:
! cat ~/.bashrc | grep conda
⑤Python和Shell之間傳參數(shù)
有時(shí)候我們想在cell中編寫一個(gè)python和shell命令混合的代碼,需要在python和shell命令之間傳參數(shù)。如:
dir_list = ['dir1', 'dir2','dir3']
for item in dir_list:
info = ! sed -n '/{item}/,/{item}/p' data_prepare.log
print(info)
第四部分:Jupyter下有趣的擴(kuò)展
- Vim擴(kuò)展:
https://github.com/lambdalisue/jupyter-vim-binding - TensorBoard擴(kuò)展
https://github.com/lspvic/jupyter_tensorboard
感興趣的可以了解下!
日后有什么新的技巧或者好玩的擴(kuò)展,會(huì)持續(xù)更新到該頁(yè)面~歡迎大家多交流