安裝anaconda並且配置jupyter notebook支援python2.x和3.x共存

趙安家發表於2017-07-02

業餘時間,偶爾接觸了python,感覺python很優雅,遂研究一下。基於elk報警器elastalert的微信企業號外掛

之前一直用的sublime text 3 , 但是對於控制檯輸入(2.x raw_input,3.x input)支援不太好,雖然可以通過sublimeREPL->python->execfile(filepath)實現,但是無疑更繁瑣(可以使用sublime 的key bindings,定義快捷鍵來觸發,但是還是覺得繁瑣),而且使用sublime+python切換python版本也不方便(網上很多資料是基於python2.x),但是python3的文章資料也越來越多,學習時經常需要切換很不方便

經過一番搜尋,最後決定使用Anaconda Anaconda是Python眾多發行版中非常適用於科學計算的版本,裡面已經整合了很多優秀的科學計算Python庫,開源且免費,全平臺支援:linux,mac,windows;支援python 2.x,3.x,Anaconda整合了jupyter notebook ,可以使用 try it in your browser 進行體驗。

安裝anaconda

官方安裝包 www.continuum.io/downloads ,但是國內比較慢,可以使用清華映象 ,從 mirrors.tuna.tsinghua.edu.cn/anaconda/ar… 下載安裝包。目前(2017-07-02)最新的是 Anaconda3-4.4.0-*

我下載的是windows 64位版Anaconda3-4.4.0-Windows-x86_64.exe(如果用於機器學習(e.g. Tensorflow) 建議使用Linux系統,具體參見 Keras安裝和配置指南(Windows))。

同時推薦 李金《中文 Python 筆記》 ,github 開啟.ipynb 較慢,推薦使用NbViewer 檢視

切換python版本

參考 Managing Python 或者 Anaconda多環境多版本python配置指導

開啟 C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Anaconda3 (64-bit) 執行 Anaconda Prompt

設定清華映象源

更多可參閱 conda 使用清華大學開源軟體映象 或者 清華映象

conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --set show_channel_urls yes複製程式碼

修改windows下jupyter預設路徑

參考 stackoverflow 上 how to change jupyter start folder? 的回答

  1. 開啟 C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Anaconda3 (64-bit) 執行 Anaconda Prompt
  2. 執行jupyter notebook --generate-config
  3. 會生成一個預設配置檔案,C:\Users\{使用者名稱}\.jupyter\jupyter_notebook_config.py
  4. 修改#c.NotebookApp.notebook_dir = ''c.NotebookApp.notebook_dir = '你的預設路徑'
  5. 開啟C:\Users\{使用者名稱}\Anaconda3\Scripts
  6. 右鍵單擊jupyter-notebook.exe併傳送到桌面快捷方式
  7. 在桌面上找到該快捷方式,右鍵->屬性->更改圖示(C)...->{Anaconda3_home}\Menu\jupyter.ico
  8. 雙擊執行,會自動開啟預設瀏覽器。

輸入

print('hello jupyter')複製程式碼

Ctrl+Enter 執行,結果如下

具體快捷鍵,參見 Help -> Keyboard Shortcuts

建立python2.7環境

conda create -n python27 python=2.7 -y
activate python27複製程式碼

設定jupyter 2.7,3.6共存

參考 Anaconda3 Python 3 和 2 in Jupyter Notebook共存方法

conda install ipykernel -y複製程式碼

複製${Anaconda3_home}\share\jupyter\kernels\python3 並重新命名為${Anaconda3_home}\share\jupyter\kernels\python27,編輯${Anaconda3_home}\share\jupyter\kernels\python27\kernel.json

{
 "argv": [
  "${Anaconda3_home}\\envs\\python27\\python.exe",
  "-m",
  "ipykernel_launcher",
  "-f",
  "{connection_file}"
 ],
 "display_name": "Python 27",
 "language": "python"
}複製程式碼

注意,修改display_name為自定義名稱,argv第一行中路徑用\\替代\

jupyter-change-kernel
jupyter-change-kernel

cell中輸入

import sys 
sys.version複製程式碼

切換不同python版本 按Ctrl+Enter執行 檢視版本,e.g. 上圖中的3.6.1,因為 Tensorflow官方文件說windows只支援 3.5.x ,故而又裝了一個3.5.3的環境

jupyter作為公開服務使用(雲IDE)

參考 Running a notebook server ,使用nssm將jupyter設定為開機自啟動服務

  1. 開啟 C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Anaconda3 (64-bit) 執行 Anaconda Prompt
  2. 切換回anaconda預設環境activate root
  3. 建立密碼 jupyter notebook password Preparing a hashed password
  4. 修改C:\Users\{使用者名稱}\.jupyter\jupyter_notebook_config.pyc.NotebookApp.ip = '*',c.NotebookApp.open_browser = False
  5. 重啟 jupyter ,開啟 http://{ip}:8888, 提示輸入密碼,輸入密碼即可登入
  6. 註冊為服務 下載nssm 注意,如果之前用過nssm,建議升級到 nssm 2.24-101-g897c7ad 版本,詳見 Windows 10 Creators Update
  7. {nssm_home}\win64\nssm.exe install jupyter {Anaconda3_home}\Scripts\jupyter-notebook.exe --config=C:\Users\{使用者名稱}\.jupyter\jupyter_notebook_config.py
  8. `{nssm_home}\win64\nssm.exe start jupyter'
  9. 瀏覽器開啟 http://ip:8888 輸入密碼登入

注意,nssm預設使用LOCALSYSTEM賬號操作,而jupyter預設讀取~\.jupyter(~\是當前登入使用者資料夾),可以使用nssm set <servicename> ObjectName <username> <password> 使用指定使用者,這樣就不需要--config=C:\Users\{使用者名稱}\.jupyter\jupyter_notebook_config.py 引數了,具體詳見 UsageManaging services from the command line

2017-03更新,增加nginx反向代理

nginx反向代理

upstream jupyter {
    server http://ip:8888;
    server http://ip2:8888;
}
server {
    listen 80;
    server_name jupyter.example.com;
    location / {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Nginx-Proxy true;
        proxy_set_header Host  $host;

        # kernels使用websocket通訊,需要增加Upgrade和Connection [WebSocket proxying](http://nginx.org/en/docs/http/websocket.html)
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $connection_upgrade;

        #如果是單服務,無負載,則不需要用upsstream
        #proxy_pass     http://ip:8888;
        proxy_pass http://jupyter;
    }
}複製程式碼

部落格 anjia.ml/2017/07/02/…
掘金 juejin.im/post/595897…
簡書 www.jianshu.com/p/e981c9d28…

相關文章