anaconda是十分方便的python全家桶,除此之外,anaconda還可以創建出python虛擬環境。可以說是十分強大了。
之前,我整理了一篇關於pip創建虛擬環境的博文:《pip建立虛擬環境》
當然,學會pip建立虛擬環境和conda建立虛擬環境的效果都是一樣。所以掌握其一就行了,或者根據實際情況使用其中的一種。
首先要明白為什么要創建虛擬環境
我們經常需要復現別人的工程,不過每個開發者所使用的開發環境不盡相同,有的使用python2,有的使用python3,有的使用tf,有的又使用pytorch等等。那我們是否需要把所有的模塊都裝好呢?
答案是可以的,不過你無法安裝多個版本的tf,如果你需要復現的工程是基於tensorflow 1.4.0的,而你自己的版本是1.9.0,是否要降版本來營造和人家一樣的環境呢?是否每次都要通過換自己本地的版本以達到工程的兼容性呢?
虛擬環境可以很好地緩解這個尷尬
我們在服務器上下載好anaconda以后,直接用
sh Anaconda*.sh
就可以完成anaconda的安裝,記住需要配置好anaconda的環境變量。方法如《Linux系統設置環境變量》
設置好以后,可以查看conda下面安裝了哪些模塊:
conda list
和pip list的用法是一樣的,我們可以看到詳細的模塊信息。
conda安裝虛擬環境
conda create -name my_env_name python=3.6
這樣就創建了一個名字為my_env_name,基於python版本3.6的一個虛擬環境了。注意,這里和pip建立的虛擬環境不同,pip建立的虛擬環境會直接在當前目錄下生成一個虛擬環境的目錄,激活虛擬環境也需要指定這個目錄才行。而conda安裝的虛擬環境,默認把虛擬環境的目錄生成在anaconda安裝目錄下的env目錄下。所以,conda創建的虛擬環境有一個很大的優點就是不用指定虛擬env的路徑,不過前提是你需要把conda的環境變量早早設置好。
我們看看conda虛擬環境的激活腳本:
source activate my_env_name
激活之后,命令行的最前面就會出現虛擬環境的名字如下:
(my_env_name)wozuishuai@ak47-ml:~$
出現了前面那個小括號就代表以及進入了虛擬環境,那我們就可以用conda隨便裝模塊了,只會影響到你的虛擬環境。
conda install -n my_env_name [package]
在這里,我們可以明顯知道什么時候該用conda建立虛擬環境以及什么時候該用pip建立虛擬環境。
當我們覺得這個虛擬環境可能用得比較多,適用其他工程的時候,我們可以用conda來建立。這樣能夠全局照顧,不需要每次指定路徑。
當我們覺得這個虛擬環境也許只在這個工程下用到,我們就用pip來建立,這樣不容易發生env目錄下的命名沖突,而且每次打開工程目錄可以看到虛擬環境的目錄躺在列表里,你就知道需要先激活虛擬環境再run你的代碼了。
如果需要退出虛擬環境,可以用以下腳本:
source deactivate
查看Conda環境下所有的虛擬環境
conda info --envs
刪除Conda虛擬環境
conda remove -n my_env_name --all
my_env_name對應的就是要刪除的虛擬環境名稱
使用文件直接配置虛擬環境的模塊包
我們可以對虛擬環境中所需要的模塊列一個心願列表,比如使用yml文件來列:
-
name: my _env_name
-
dependencies:
-
- python=3.6
-
- pytest
-
- keras
-
- tqdm
-
- Pillow
-
- pip:
-
- tensorflow
把上述內容放在yaml文件里,比如命名為env_config.yml
那我們想直接生成這么一個環境只需要:
conda env create -f env_config.yml
然后,用同樣的方式激活虛擬環境就可以了。