原文見:https://blog.csdn.net/qq_27825451/article/details/84427269
一、什么是jupyter
1、簡介:
jupyter notebook是一種 Web 應用,能讓用戶將說明文本、數學方程、代碼和可視化內容全部組合到一個易于共享的文檔中。它可以直接在代碼旁寫出敘述性文檔,而不是另外編寫單獨的文檔。也就是它可以能將代碼、文檔等這一切集中到一處,讓用戶一目了然。
Jupyter這個名字是它要服務的三種語言的縮寫:Julia,PYThon和R,這個名字與“木星(jupiter)”諧音。Jupyter Notebook 已迅速成為數據分析,機器學習的必備工具。因為它可以讓數據分析師集中精力向用戶解釋整個分析過程。我們可以通過Jupyter notebook寫出了我們的學習筆記。但是jupyter遠遠不止支持上面的三種語言,目前能夠使用的語言他基本上都能支持,包括C、C++、C#,java、Go等等。
jupyter notebook和我們前面所講的兩篇系列文章ipython其實都是來自同一個產品族,它的前身叫做ipython notebook,至于后面為什么更名這不得而知,這也就是為什么很多文章總是默認將ipython就說成是ipython notebook的原因了。但是既然已經更名了,我們還是區別對待ipython和jupyter notebook。
2、安裝與打開
安裝這里就不說了,使用過anaconda的人都清楚,在安裝anaconda的時候會一起打包安裝,如果想要自己安裝,可以通過pip或者是conda安裝,
怎么打開也很簡單,可以直接在anaconda的菜單里面打開jupyter notebook,也可以通過命令行,輸入jupyter notebook或者是jupyter-notebook都可以。
我們說了,jupyter notebook會在瀏覽器中中打開,是一種Web應用,故而有web路徑和端口號了,我的打開之后,在瀏覽器的地址欄會顯示如下:
http://localhost:8888/tree
當一次打開多個jupyter notebook的時候,端口號會依次遞增8889,8890依次遞增。
3、jupyter的作用
前面說了一大堆,也不清楚jupyter到底有啥好的啊,到底有一些什么功能呢?
在介紹 Jupyter Notebook 的功能之前,讓我們先來看一個概念:文學編程 ( Literate programming ),這是由 Donald Knuth 提出的編程方法。傳統的結構化編程,人們需要按計算機的邏輯順序來編寫代碼;與此相反,文學編程則可以讓人們按照自己的思維邏輯來開發程序。
簡單來說,文學編程的讀者不是機器,而是人。 我們從寫出讓機器讀懂的代碼,過渡到向人們解說如何讓機器實現我們的想法,其中除了代碼,更多的是敘述性的文字、圖表等內容。這么一看,這不正是數據分析人員所需要的編碼風格么?不僅要當好一個程序員,還得當好一個作家。那么 Jupyter Notebook 就是不可或缺的一款集編程和寫作于一體的效率工具。
以下列舉了 Jupyter Notebook 的眾多優點:
(1)極其適合數據分析,想象一下如下混亂的場景:你在終端中運行程序,可視化結果卻顯示在另一個窗口中,包含函數和類的腳本存在其他文檔中,更可惡的是你還需另外寫一份說明文檔來解釋程序如何執行以及結果如何。此時 Jupyter Notebook 從天而降,將所有內容收歸一處,你是不是頓覺靈臺清明,思路更加清晰了呢?
(2)支持多語言,也許你習慣使用 R 語言來做數據分析,或者是想用學術界常用的 MATLAB 和 Mathematica,這些都不成問題,只要安裝相對應的核(kernel)即可。這里列出了 Jupyter 支持的所有語言,供您參考。
分享便捷,支持以網頁的形式分享,GitHub 中天然支持 Notebook 展示,也可以通過 nbviewer 分享你的文檔。當然也支持導出成 HTML、Markdown 、PDF 等多種格式的文檔。
(3)遠程運行,在任何地點都可以通過網絡鏈接遠程服務器來實現運算
(4)交互式展現,不僅可以輸出圖片、視頻、數學公式,甚至可以呈現一些互動的可視化內容,比如可以縮放的地圖或者是可以旋轉的三維模型。這就需要交互式插件(Interactive widgets)來支持,更多內容請參考這里。
常見的一些jupyter高級應用如:
數學公式編輯
幻燈片制作
魔術關鍵字
二、jupyter notebook的簡單使用
1、常用的jupyter notebook一些命令如下:指的是在cmd中使用jupyter命令
(1)查看jupyter notebook的相關幫助
jupyter-notebook --help
jupyter-notebook --help-all (會顯示更詳細的信息)
jupyter-notebook -h (只有一個橫杠噢,熟悉命令使用的小伙伴都知道)
(2)jupyter notebook常用的子命令——subcommand
list :列出當前的所打開的jupyter notebook的一些信息,比如:
??? (base) C:\Users\lenovo>jupyter-notebook list
??? Currently running servers:
??? http://localhost:8888/?token=5751bd2f4a5675c59c15c9cdfaa7ecbe431ba68b7d23a3c7 :: C:\Users\lenovo
??? http://localhost:8889/?token=a9f1a6a33a5b0fa93f51552aecbb99a3dec321fdd5e0e74a :: C:\Users\lenovo
?這里我打開了兩個jupyter notebook,一個端口為8888,一個為8889
stop:關閉所給定的端口號的那一個jupyter
??? (base) C:\Users\lenovo>jupyter-notebook stop 8888
??? Shutting down server on port 8888 ...
??? ?
??? (base) C:\Users\lenovo>jupyter notebook list
??? Currently running servers:
??? http://localhost:8889/?token=a9f1a6a33a5b0fa93f51552aecbb99a3dec321fdd5e0e74a :: C:\Users\lenovo
關閉了8888,只剩下一個8889了。
password :給某一個打開的jupyter notebook 服務設置密碼,后面直接輸入所要添加的密碼即可。
(3)jupyter notebook命令的常用選項,下面進介紹一些常用的,想要知道所有的詳細使用可以使用
jupyter notebook --help-all 查看jupyter命令的詳細信息:
?
--generate-config? 產生默認的配置文件()這個是重點,后面會講到)
--no-browser 啟動jupyter notebook之后不打開瀏覽器(默認情況下是會打開一個瀏覽器界面的)
--pylab 同前面講解ipython的時候很類似,在jupyter notebook里面集成,也可以在jupyter notebook里面使用
??????????? %pylab 或者是%matplotlib魔術命令(這是最常用的,后面也會講到)
--config=<Unicode>? 制定一個完全路徑的配置文件名稱,關于配置文件后面會詳解,默認是default,即系統指定的默認配置文件
--ip=<Unicode>? 默認是: 'localhost',從前面的現實中也可以看出來,表示的是notebook服務器會監聽的IP地址,我們也可以手動指定
--port=<Int>? 指定jupyter notebook打開瀏覽器的端口號,默認是: 8888,也可以手動輸入
--notebook-dir=<Unicode> 默認使用默認的目錄,表示的是notebook和kernels的目錄
--browser=<Unicode> 還可以指定某一個特定的瀏覽器打開,默認使用系統默認的瀏覽器打開,是可以自己選定瀏覽器的。
?
2、jupyter的簡單使用
當我們打開jupyter notebook(不管用什么樣的方式打開,使用菜單打開或者是命令行打開是一樣的)會在默認的瀏覽器中看到這樣的界面:
但是每一臺不同的電腦打開之后的界面是不同的,仔細觀察就會發現,這里面現實的一些文件夾就是電腦用戶目錄下面的文件夾,這是為什么呢?那是因為jupyter notebook在啟動的時候總是有一個默認的目錄,一般情況下,使用戶的目錄。
那怎么查看默認目錄,或者是我想要修改默認目錄該怎么做呢?
實際上,jupyter的一些默認設置都設置在一個默認的配置文件中,我們可以查看并且修改配置文件中的內容
(1)查看配置文件
在cmd中使用如下命令:jupyter-notebook --generate-config
??? (base) C:\Users\lenovo>jupyter-notebook --generate-config
??? Writing default config to: C:\Users\lenovo\.jupyter\jupyter_notebook_config.py
可見我的默認配置文件在:C:\Users\lenovo\.jupyter\jupyter_notebook_config.py中,現在我們查看配置文件的信息。得到如下:
打開之后發現,這本質上應該是一個python的 py文件,但是實際上全部都是用井號#開頭的,這不是意味著這都是一些注釋嗎?可以這么說,但實際上觀察會發現,有的有兩個井號開頭 ##,這才是注釋文本,而那些以一個井號#開頭的實際上就是默認的配置信息,也就是我們要修改的。當然這個文件很長,我不會一個一個講解每一個配置信息是什么意思,我指將如何自定義默認目錄。
我們通過編輯器,搜索directory定位到如下位置:
??? ## The directory to use for notebooks and kernels.
??? #c.NotebookApp.notebook_dir = ''
這句話就是設置jupyter的目錄的,可見默認值是沒有的,我們現在比如要使它指定到我們自己的目錄,比如我要讓它指定到F盤中的myjupyter文件夾,則修改如下:
??? ## The directory to use for notebooks and kernels.
??? c.NotebookApp.notebook_dir = 'F:\myjupyter'
保存修改的文件并關閉!然后再打開,發現如下信息,從下面的信息可以看見這樣一句話:
Serving notebooks from local directory: F:\myjupyter ?
這就說明修改成功。
??? (base) C:\Users\lenovo>jupyter-notebook
??? [I 14:17:57.432 NotebookApp] JupyterLab beta preview extension loaded from D:\ProgramData\Anaconda3\lib\site-packages\jupyterlab
??? [I 14:17:57.432 NotebookApp] JupyterLab application directory is D:\ProgramData\Anaconda3\share\jupyter\lab
??? [I 14:18:00.231 NotebookApp] Serving notebooks from local directory: F:\myjupyter
??? [I 14:18:00.232 NotebookApp] 0 active kernels
??? [I 14:18:00.232 NotebookApp] The Jupyter Notebook is running at:
??? [I 14:18:00.232 NotebookApp] http://localhost:8888/?token=ad2aa0097b0687bbd8b5b11909101533630e781e7c28753b
??? [I 14:18:00.232 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
??? [C 14:18:00.234 NotebookApp]
??????? Copy/paste this URL into your browser when you connect for the first time,
??????? to login with a token:
??????????? http://localhost:8888/?token=ad2aa0097b0687bbd8b5b11909101533630e781e7c28753b&token=ad2aa0097b0687bbd8b5b11909101533630e781e7c28753b
??? [I 14:18:00.786 NotebookApp] Accepting one-time-token-authenticated connection from ::1
注意事項:
第一、文件夾必須先創建好,比如這里F盤下面的myjupyter文件夾要先創建好;不然會jupyter初始化時會找不到目錄
第二、要取消注釋,c前面的#要去掉(我還不知道這是為什么?哪位知道望告知!)
第三、要注意文件名不可以是數字
除此之外,上面的這些操作,推薦全部使用anaconda自帶的Anaconda Promp進行操作,因為它提供了非常好的環境管理功能,而在系統自身的cmd中操作,可能因為環境變量設置等相關的一些原因,不成功。比如我在多個環境中都安裝了jupyter,但是cmd中環境變量所指向的那個是A,我們修改的可能是B的配置文件,這樣通過cmd啟動jupyter發現依然未改變。
現在打開,則發現web界面變成了如下:
三、jupyter運行環境的配置——一python運行環境為例
jupyter notebook本質上是一個web應用程序,我們可以在上面書寫代碼,但是代碼本身的運行環境是需要自己安裝的,沒有運行環境,即使是在jupyter notebook里面書寫的代碼怡然沒有辦法運行。因為代碼本身,web應用程序是不認識的。
幸運的是,在使用anaconda安裝的時候,會默認將安裝jupyter,而且會安裝一個Python的運行環境,所以打開jupyter的時候,可以直接看見這個運行環境,在jupyter里面稱之為內核kernel,如下所示:
在右上角點擊下拉按鈕,會得到如圖所示的結果,
第一個python3 ,表示的就是默認的python3 kernel,它是隨著anaconda一起安裝的;
Text File ,表示的是新建一個文本文件
Folder ,表示的是新建一個文件夾
Terminal ,表示的是在瀏覽器中新建一個用戶終端,即類似于cmd的shell。
但是,這是遠遠不夠的,因為我不可能所有的程序都是使用這一個python kernel,使用過TensorFlow的人都知道如何創建一個新的運行環境,打包TensorFlow所依賴的各種包。本文以python為例,我還有另外兩個環境,一個是TensorFlow,一個是pytorch,還有一個是,mxnet。他們都是使用conda創建的python運行環境。其實就一句話:
conda create -n tensorflow python=3.6
conda創建運行環境的方法這里就不詳細說明了,可以參閱相關文章。注意:因為anaconda的服務器在國外,上面的執行速度實在是太慢,甚至等了半天,然后連接失敗,所以,我們可以使用清華大學的鏡像進行下載,在使用上面執行命令之前,添加一句:conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
再使用:conda create -n tensorflow python=3.6
這會快非常多!!!
注意:
TUNA 還提供了 Anaconda 倉庫的鏡像,運行以下命令:
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config --set show_channel_urls yes
即可添加 Anaconda Python 免費倉庫。
直接粘貼復制以上代碼即可。另外,要一行一行運行,并且每一行運行完沒有任何結果,直接運行下一行即可。
三行代碼運行完,可以運行 conda install numpy 測試一下吧。
1、原始的方法解決多個Python運行環境問題
就是走在每一個python的運行環境里面都使用conda install notebook 安裝一個與之對應的notebook,然后我在做開發的時候,需要用什么環境,我就在每一個Python環境中的script文件夾下面打開對應的哪個jupyter notebook,這當然沒問題。但這樣做不是很高級,我需要安裝很多次,而且每次在使用jupyter notebook的時候都只能使用一個環境,局限性很大。
2、更高級的辦法
現在,比如我已經在anaconda里面創建了一個名為tensorflow的環境,但是,怎么把它添加到jupyter里面呢?
(1)方法一:
首先在anaconda prompt里面激活我們需要的環境,然后執行下面一個命令:
(base) C:\Users\lenovo>activate python27
(python27) C:\Users\lenovo>python -m ipykernel install --name python27
Installed kernelspec python27 in C:\ProgramData\jupyter\kernels\python27
和
(base) C:\Users\lenovo>activate tensorflow
(tensorflow) C:\Users\lenovo>python -m ipykernel install --name tensorflow
Installed kernelspec tensorflow in C:\ProgramData\jupyter\kernels\tensorflow
總結:兩步走,
第一步:激活相應的環境
第二部分:執行命令 python -m ipykernel install --name 環境名稱
現在打開我們的jupyter notebook,查看python環境如下:
補充:也有人用下面的方法:
先激活某一個Python環境:然后再執行下面兩個語句:
conda install -n 環境名稱 ipykernel
python -m ipykernel install --user ?
注意:上面這種方式都是可以的,但問題是還是需要針對每一個環境安裝一次ipykernel,而且有時候不知怎么回事,總是會遇見一些亂七八糟的錯誤,我還沒搞清楚是為什么,如果誰知道,望告知。
(2) 方法二——一步到位的方法
在我創建完我需要的運行環境之后,然后只需要在base運行環境中執行一個命令即可。
(base) C:\Users\lenovo>conda install nb_conda
將會將所有的kernel全部添加進去,這種方法是最快的,而且最不容易出錯,推薦使用。
(3)補充方法——綜合前面兩者
(1)一步到位:
(base) C:\Users\lenovo>conda install nb_conda
(base) C:\Users\lenovo>conda install nb_conda_kernels
兩種方法均可以
(2)分步完成:
第一步:激活某一個環境activate mxnet
第二步:在環境中安裝ipykernel:pip install ipykernel
第三步:再執行命令:
???????? python -m ipykernel install --user --name mxnet --display-name mymxnet
后面的藍色部分可以省略。第一個mxnet指的是我激活的那一個環境名,這里是mxnet;第二個mymxnet是我要在jupyter里面顯示的內核名稱,是自己自定義的,我定義為mymxnet。
?
全文總結:關于ipython系列的文章到這里就結束了,三篇文章,從ipython到jupyter notebook,希望對于一些有需要的小伙伴有所幫助,本來還打算寫一篇關于jupyter notebook的使用的,但是這種教程網上實在太多了,就不在這里畫蛇添足了。
————————————————
版權聲明:本文為CSDN博主「LoveMIss-Y」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/qq_27825451/article/details/84427269