(數據科學學習手札81)conda+jupyter玩轉數據科學環境搭建

  • 2020 年 3 月 31 日
  • 筆記

本文示例yaml文件已上傳至我的Github倉庫https://github.com/CNFeffery/DataScienceStudyNotes

1 簡介

  我們在使用Python進行數據分析時,很多時候都在解決環境搭建的問題,不同版本、依賴包等問題經常給數據科學工作流的搭建和運轉帶來各種各樣令人頭疼的問題,本文就將基於筆者自己摸索出的經驗,以geopandas環境的搭建為例,教你使用conda+jupyter輕鬆搞定環境的搭建、管理與拓展。

圖1

2 虛擬環境的搭建與使用

2.1 使用conda創建虛擬環境

  以Windows操作系統為例,因為全程主要使用命令行,所以其他系統方法類似,有少許語句有差異的地方遇到問題時可以自行查找解決。首先我們要解決的是環境的創建,第一步需要安裝conda服務,這裡我們有Anacondaminiconda兩種方式,本文選擇miniconda體積小巧,不會像Anaconda那樣自帶數量眾多的科學計算相關包而顯得臃腫。

  有條件上外網的讀者朋友可以在官網( https://docs.conda.io/en/latest/miniconda.html )下載與你的操作系統對應的安裝包,也可以在清華大學鏡像站獲取下載鏈接應用軟件Condahttps://mirrors.tuna.tsinghua.edu.cn/ )中下載對應的最新的安裝包:

圖2

  本文選擇的是從官網下載的最新版本4.8.2,因為miniconda自帶Python,之後所有新環境的創建我們都可以通過conda來實施,所以建議你在安裝之前系統中不要保有其他Python環境。下載完成之後直接打開安裝,一路可以按照默認的選項繼續,到圖3顯示的步驟時為了方便之後的使用建議都勾選上:

圖3

  完成安裝後我們進入控制台輸入conda --version檢查是否成功安裝:

C:Usershp>conda --version  conda 4.8.2  

  輸入conda env list查看當前存在的所有環境:

C:Usershp>conda env list  # conda environments:  #  base                  *  C:Conda  

  可以看到我們當前只有1個環境base,即miniconda自帶的Python,因為圖3中我們勾選了Register Miniconda3 as the system Python 3.7,所以在控制台中直接輸入python可以得到下列結果:

C:Usershp>python  Python 3.7.6 (default, Jan  8 2020, 20:23:39) [MSC v.1916 64 bit (AMD64)] :: Anaconda, Inc. on win32      Warning:  This Python interpreter is in a conda environment, but the environment has  not been activated.  Libraries may fail to load.  To activate this environment  please see https://conda.io/activation    Type "help", "copyright", "credits" or "license" for more information.  >>> quit() # 退出    C:Usershp>  

  控制台輸入conda list可以看到當前僅有的base環境中僅有下列包:

C:Usershp>conda list  # packages in environment at C:Conda:  #  # Name                    Version                   Build  Channel  asn1crypto                1.3.0                    py37_0    defaults  ca-certificates           2020.1.1                      0    defaults  certifi                   2019.11.28               py37_0    defaults  cffi                      1.14.0           py37h7a1dbc1_0    defaults  chardet                   3.0.4                 py37_1003    defaults  conda                     4.8.2                    py37_0    defaults  conda-package-handling    1.6.0            py37h62dcd97_0    defaults  console_shortcut          0.1.1                         4    defaults  cryptography              2.8              py37h7a1dbc1_0    defaults  idna                      2.8                      py37_0    defaults  menuinst                  1.4.16           py37he774522_0    defaults  openssl                   1.1.1d               he774522_4    defaults  pip                       20.0.2                   py37_1    defaults  powershell_shortcut       0.0.1                         3    defaults  pycosat                   0.6.3            py37he774522_0    defaults  pycparser                 2.19                     py37_0    defaults  pyopenssl                 19.1.0                   py37_0    defaults  pysocks                   1.7.1                    py37_0    defaults  python                    3.7.6                h60c2a47_2    defaults  pywin32                   227              py37he774522_1    defaults  requests                  2.22.0                   py37_1    defaults  ruamel_yaml               0.15.87          py37he774522_0    defaults  setuptools                45.2.0                   py37_0    defaults  six                       1.14.0                   py37_0    defaults  sqlite                    3.31.1               he774522_0    defaults  tqdm                      4.42.1                     py_0    defaults  urllib3                   1.25.8                   py37_0    defaults  vc                        14.1                 h0510ff6_4    defaults  vs2015_runtime            14.16.27012          hf0eaf9b_1    defaults  wheel                     0.34.2                   py37_0    defaults  win_inet_pton             1.1.0                    py37_0    defaults  wincertstore              0.2                      py37_0    defaults  yaml                      0.1.7                hc54c509_2    defaults  

  接下來我們開始來搭建本文用於舉例說明的geopandas環境,使用conda create -n 環境名稱 python=版本來創建新的環境,譬如這裡我們創建名為python_spatial的虛擬環境,Python版本選擇3.7

C:Usershp>conda create -n python_spatial python=3.7  

  遇到Proceed ([y]/n)?輸入y繼續,等相關資源下載並安裝配置完成後,再次查看當前存在的所有環境:

C:Usershp>conda env list  # conda environments:  #  base                  *  C:Conda  python_spatial           C:Condaenvspython_spatial  

  可以看到與之前相比多了我們剛剛創建好的python_spatial環境,使用conda activate 環境名稱來激活指定的環境:

C:Usershp>conda activate python_spatial    (python_spatial) C:Usershp>  

  可以發現這時命令行開頭多了(python_spatial),這代表我們已經進入激活的python_spatial環境中,接着我們就可以使用conda命令在當前環境中安裝geopandas,按照官網的推薦方式從conda-forge對應的channel進行安裝,執行conda install --channel conda-forge geopandas,遇到需要選擇的地方一樣地輸入y,這裡依賴包較多,需要等待較長時間,直到最後done出現表示安裝成功,在控制台中直接進入python,檢查geopandas是否正確安裝:

(python_spatial) C:Usershp>python  Python 3.7.7 (default, Mar 23 2020, 23:19:08) [MSC v.1916 64 bit (AMD64)] :: Anaconda, Inc. on win32    Type "help", "copyright", "credits" or "license" for more information.  >>> import geopandas as gpd  >>>  

  至此,我們已經完成了geopandas基礎環境的搭建,接下來我們來配置使用jupyter

2.2 配置jupyter lab

  類似condajupyter也分為jupyter notebookjupyter lab,兩者核心功能都差不多,但jupyter lab擁有更多的拓展功能,並且界面和操作方式也更加炫酷方便,所以本文選擇jupyter lab,在上一節中創建好的python_spatial環境下使用conda install jupyterlab安裝基礎部分,安裝結束之後,在python_spatial環境下可以通過執行jupyter lab來打開它,在此之前需要先為jupyter lab配置虛擬環境,否則只能識別到默認的base環境。

  • 安裝ipykernel

    退出虛擬環境後執行conda install ipykernel

  • 為虛擬環境安裝ipykernel

    執行conda install -n python_spatial ipykernel

  • 激活虛擬環境&將虛擬環境寫入jupyter的kernel中

C:Usershp>conda activate python_spatial    (python_spatial) C:Usershp>python -m ipykernel install --user --name python_spatial --display-name     "spatial"  Installed kernelspec python_spatial in C:UsershpAppDataRoamingjupyterkernelspython_spatial    (python_spatial) C:Usershp>  

  這時我們在jupyter lab中已經可以切換到python_spatial環境了,接下來為了使用jupyter lab的插件拓展,需要安裝nodejs,我們在python_spatial下執行conda install nodejs即可,完成安裝之後根據自己對插件功能的需要可以分別安裝不同的插件,下面舉幾個常用的例子:

  • html交互部件插件

    為了在jupyter lab中渲染一些html部件,譬如tqdm中的交互式進度條,在虛擬環境下執行下列命令:

pip install ipywidgets  jupyter labextension install @jupyter-widgets/jupyterlab-manager  

  完成後執行jupyter lab,在打開的操作界面中notebook下點擊python_spatial創建新的notebook,執行如下命令(提前安裝好tqdm),可以看到出現了交互式的進度條:

圖4

  • 目錄插件

    ipynb文件中可以用markdown編寫各級別標題,在使用下列插件自動生成目錄:

jupyter labextension install @jupyterlab/toc  

圖5

  • matplotlib交互式繪圖

    使用matplotlib交互式繪圖模式:

pip install ipympl  jupyter labextension install @jupyter-widgets/jupyterlab-manager jupyter-matplotlib  

  安裝完成後就可以使用%matplotlib widget開啟交互式繪圖模式(請提前安裝好geopandas繪圖依賴包descartes):

圖6

你也可以在側邊欄中發現更多的實用插件:

圖7

2.3 虛擬環境的備份和恢復

  conda提供了將虛擬環境導出為yaml文件的功能,使得我們可以保留好不容易創建好的虛擬環境中的配置信息,格式如conda env export > 導出路徑文件名.yml,譬如我們導出前面創建好的python_spatial到所需路徑下:

(python_spatial) C:Usershp>conda env export > C:UsershpDesktoppython_spatial.yml    (python_spatial) C:Usershp>  

  之後你可以在安裝好conda服務的其他機器上按照conda env create -n 新環境名稱 -f=路徑文件名.yml,譬如我們就在本機上用已經導出的python_spatial.yml複製為新的虛擬環境,耐心等待之後conda會自動完成前面所有我們手動實現的步驟:

conda create -n new_python_spatial -f=C:UsershpDesktoppython_spatial.yml  

  之後只需要像前文中一樣執行python -m ipykernel install --user --name new_python_spatial --display-name "new spatial"從而為jupyter lab添加新的虛擬環境的kernel信息,在new_python_spatial環境下啟動jupyter lab,這是我們可使用的環境變成了3個:

圖8

2.4 虛擬環境的移除

  使用conda remove -n 環境名稱 --all 來移除已經創建的環境,譬如我們使用conda remove -n new_python_spatial -allnew_python_spatial移除之後,再次查看所有環境:

C:Usershp>conda env list  # conda environments:  #  base                  *  C:Conda  python_spatial           C:Condaenvspython_spatial  

  但這時會存在一個惱人的地方,我們這裡只是移除了虛擬環境,但前面註冊到jupyter lab中的kernel還會顯示,但實際上是沒有對應環境存在的,所以強行選擇已經移除的環境對應的kernel會報錯:

圖9

  控制台中使用jupyter kernelspec list查看信息:

C:Usershp>jupyter kernelspec list  Available kernels:    new_python_spatial    C:UsershpAppDataRoamingjupyterkernelsnew_python_spatial    python_spatial        C:UsershpAppDataRoamingjupyterkernelspython_spatial    python3               C:Condasharejupyterkernelspython3  

  接着使用jupyter kernelspec remove kernel名稱對其進行移除即可:

C:Usershp>jupyter kernelspec remove new_python_spatial  Kernel specs to remove:    new_python_spatial    C:UsershpAppDataRoamingjupyterkernelsnew_python_spatial  Remove 1 kernel specs [y/N]: y  [RemoveKernelSpec] Removed C:UsershpAppDataRoamingjupyterkernelsnew_python_spatial  

  之後在啟動jupyter lab就會發現殘餘的kernel跟着消失了。

  以上就是本文的全部內容,對應的yaml文件已上傳至文章開頭的Github倉庫中,你可以直接基於它創建對應本文python_spatial的虛擬環境。