快速上手 Anaconda 與 Jupyter 的虛擬環境與核心設定

學.誌|Chris Kang
不止數據|Not Only Data
9 min readJan 9, 2020

這一篇主要是用來統整在安裝過程會遇到的問題,每一次重新處理安裝 Anaconda 都會花一堆時間。希望這篇文章能夠幫到未來的自己,也能幫到有需要的人。

備註:本文的指令都是以 Mac 的環境為主,若是 Win 或是 Linux 可以查詢關鍵字。

安裝 Anaconda

Anaconda 和 Miniconda 的差異:

有分成 AnacondaMiniconda 兩個版本,就把他想成一個是全家桶餐,想要的不想要的都幫你配好了;後者則是自助餐,比較麻煩但卻能只裝自己想吃的東西。

那 Anaconda 跟 conda 是什麼關係?

大概就是私生子…沒有,其實 Anaconda 是一個 Python 資料科學 (Data Science) 平台,包含常用的 Pandas、Matplotlib、SciPy 等套件,其套件管理器就是 conda。

conda 是一個套件管理包,只要安裝 Anaconda 就會幫你自動安裝 conda 管理套件。conda 之所以受歡迎,是因為他能直接建立一個真正意義上隔離環境,而無須向 virtualenv 一樣需要跟 root 版本的 Python 等套件相依,因此能讓環境更乾淨一些。

注意這裡,Conda 是各種的套件管理包,不單只有 Python。誤解的來源可能是因為使用 Anaconda 的 Python 套件時,通常也會用 conda 來管理,因此大家就直覺認為 conda 只能管理 Python 套件。

如 pip 就只能管理 Python 的套件,但優點是他們擁有更大的 Python 資料庫。

Conda 與 Pip 到底差在哪?

讓大家參考兩篇經典的文章:

如何在 conda 的環境中,恰當地使用 pip:

  1. 先安裝 brew 套件管理系統(For MacOS)。
  2. 安裝 Anaconda 套件組。
  3. 找 conda 管理套件裡的 pip,如果沒有就 conda install pip
  4. 再使用 pip install new_modulepip install --upgrade <package>,絕對不要用 sudo pip install 會導致系統檔案被污染。

Conda 相關指令:

  • Conda 安裝套件:

conda 參數,-c 是指 channel,如果於本找不到,可以到 conda-forge 裡來搜尋,但 conda-forge 也有一些缺點,有些套件會和 Anaconda 本身的套件產生相容性問題,因此可以選擇使用。

conda install -c conda-forge XXX_module
  • 安裝特定套件:

使用一段時間後,就會遇到一個問題–––難道我每一次都要進行一模一樣的安裝流程?難道不能直接生成一個清單,以後只要照著清單安裝就好?答案當然可以!

pip 指令:

# 生成清單
$ pip freeze > requirements.txt
# 安裝清單上的套件
$ pip install -r requirements.txt

Conda 指令:

# Conda 的安裝清單
$ conda install --yes --file requirements.txt
# Conda 輸出成 yml 清單
$ conda env export > freeze.yml
# Conda 輸出成 txt 清單
conda list -e > requirements.txt
# 直接創建環境
$ conda env create -f freeze.yml
# 如果遇到某些包不能用,則可使用下列指令
$ while read requirement; do conda install --yes $requirement; done < requirements.txt
# 如果想要在包不能用的情況下,用 pip 替代安裝,則可以
$ while read requirement; do conda install --yes $requirement; done < requirements.txt
  • Conda 升級:
# 可在任何環境下更新 base 的套件版本
$ conda update -n base -c defaults conda
  • Conda 更新套件:
$ conda update anaconda
  • Conda 刪除沒在用的包和快取:
$ conda clean -a

Conda 環境管理:

  • 檢視目前可存取的虛擬環境:
$ conda env list
env list 的指令顯示結果
  • 檢視 Jupyter Notebook / Lab 的核心(Kernel):

前提是要先安裝 ipykernel 套件,才能自行制訂 Jupyter 的套件。

$ jupyter kernelspec list
目前只有一個 python3 的核心
  • 新增 Conda 的虛擬環境:

python=X,其中 X 可以為特定版本或大版本,例如 3 或 3.7.1 等。

# 簡單版本
$ conda create -n myenv python=3
# 為特定環境安裝套件
$ conda create -n <environment> <package>
$ conda create -n envname python=3.4 scipy=0.15.0 astroib bumpy
# 從特定環境套件設定虛擬環境
$ conda env create -f environment.yml
  • 在虛擬環境下默認不安裝特定包:

如果想安裝默認包,需要進 .condarc 修改默認安裝。

conda create --no-default-packages -n my_env_name python
  • 不透過複製方式創建新環境:
# 查看模組訊息
$ conda list --explicit
# 導出模組清單
$ conda list --explicit > requirement.txt
# 創建相同的環境
conda create --name newenv --file requirement.txt
# 向已經存在的環境安裝特定模組
conda install --name newenv --file requirement.txt
  • 察看當下虛擬環境下的套件表:
$ conda list
  • 搜尋套件是否在 conda 上:
$ conda search <package>
  • 安裝通道管理:
# 新增通道,優先級最高
conda config --add channels new_channel
# 新增通道,優先級最高(和上方效果一致)
conda config --prepend channels new_channel
# 新增通道,優先級最低
conda config --append channels new_channel
# 顯示通道狀態
conda config --set show_channel_urls yes
# 要使 conda 使用舊方式,並在列出的通道中安裝最新的套件
conda config --set channel_priority false
  • 執行與關閉 Conda 的虛擬環境:
# Activate the conda virtual env
$ conda activate myenv
# Deactivate the conda virtual env
$ conda deactivate
  • 移除 Conda 虛擬環境:

在移除前,必須先轉換至其他的環境,才能

$ conda remove --name myenv --all$ conda remove -n myenv --all # 兩個相同
  • 設定 Conda 虛擬環境的核心:

A. 設定前需安裝 ipykernel,才能控制 Jupyter 的版本核心。當然也可以直接安裝 Jupyter Lab 或是 Jupyter Notebook,理論上都會自動幫你安裝。

$ conda install ipykernel

B. 把特定的虛擬環境加入設定的核心,並推至 Jupyter 的編輯器裡。

$ python -m ipykernel install --user --name myenv --display-name "Myenv"

C. 移除運算核心。

$ jupyter kernelspec remove myenv

最後的最後,如果這篇文章有幫到你,再麻煩你拍個手,你的拍手勢我最大的寫作動力!

【希望用你的掌聲來投票與支持】
拍 5~10 下:簽個到,表示支持(感謝你的鼓勵啊啊啊)
拍 10~20 下:想要我未來多寫「數據技術相關」內容
拍 20~30 下:想要我未來多寫「數據分析實例」內容
拍 30~50 下:我有你這讀者,寫這篇也心滿意足了!

謝謝你/妳,願意把我的文章閱讀完

如果你喜歡筆者在 Medium 的文章,可以拍個手(Claps),
也歡迎你分享給你覺得有需要的朋友們。

|參考資料|

--

--

學.誌|Chris Kang
不止數據|Not Only Data

嗨!我是 Chris,一位擁有技術背景的獵頭,熱愛解決生活與職涯上的挑戰。專注於產品管理/資料科學/前端開發 / 人生成長,在這條路上,歡迎你找我一起聊聊。歡迎來信合作和交流: chriskang0917@gmail.com