(數據科學學習手札81)conda+jupyter玩轉數據科學環境搭建
- 2020 年 3 月 31 日
- 筆記
本文示例yaml文件已上傳至我的
Github
倉庫https://github.com/CNFeffery/DataScienceStudyNotes
1 簡介
我們在使用Python
進行數據分析時,很多時候都在解決環境搭建的問題,不同版本、依賴包等問題經常給數據科學工作流的搭建和運轉帶來各種各樣令人頭疼的問題,本文就將基於筆者自己摸索出的經驗,以geopandas
環境的搭建為例,教你使用conda
+jupyter
輕鬆搞定環境的搭建、管理與拓展。

2 虛擬環境的搭建與使用
2.1 使用conda創建虛擬環境
以Windows
操作系統為例,因為全程主要使用命令行,所以其他系統方法類似,有少許語句有差異的地方遇到問題時可以自行查找解決。首先我們要解決的是環境的創建,第一步需要安裝conda
服務,這裡我們有Anaconda
和miniconda
兩種方式,本文選擇miniconda
體積小巧,不會像Anaconda
那樣自帶數量眾多的科學計算相關包而顯得臃腫。
有條件上外網的讀者朋友可以在官網( https://docs.conda.io/en/latest/miniconda.html )下載與你的操作系統對應的安裝包,也可以在清華大學鏡像站–獲取下載鏈接–應用軟件–Conda( https://mirrors.tuna.tsinghua.edu.cn/ )中下載對應的最新的安裝包:

本文選擇的是從官網下載的最新版本4.8.2
,因為miniconda
自帶Python
,之後所有新環境的創建我們都可以通過conda
來實施,所以建議你在安裝之前系統中不要保有其他Python
環境。下載完成之後直接打開安裝,一路可以按照默認的選項繼續,到圖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
類似conda
,jupyter
也分為jupyter notebook
和jupyter 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
),可以看到出現了交互式的進度條:

-
目錄插件
在
ipynb
文件中可以用markdown
編寫各級別標題,在使用下列插件自動生成目錄:
jupyter labextension install @jupyterlab/toc

-
matplotlib交互式繪圖
使用
matplotlib
交互式繪圖模式:
pip install ipympl jupyter labextension install @jupyter-widgets/jupyterlab-manager jupyter-matplotlib
安裝完成後就可以使用%matplotlib widget
開啟交互式繪圖模式(請提前安裝好geopandas
繪圖依賴包descartes
):

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

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個:

2.4 虛擬環境的移除
使用conda remove -n 環境名稱 --all
來移除已經創建的環境,譬如我們使用conda remove -n new_python_spatial -all
將new_python_spatial
移除之後,再次查看所有環境:
C:Usershp>conda env list # conda environments: # base * C:Conda python_spatial C:Condaenvspython_spatial
但這時會存在一個惱人的地方,我們這裡只是移除了虛擬環境,但前面註冊到jupyter lab
中的kernel還會顯示,但實際上是沒有對應環境存在的,所以強行選擇已經移除的環境對應的kernel會報錯:

控制台中使用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
的虛擬環境。