Python多環境管理

昀溪發表於2018-08-15

Python環境管理

什麼是Anaconda

Anaconda是專注於資料分析的Python發行版本,包含了conda、Python等190多個科學包及其依賴項。Anaconda透過管理工具包、開發環境、Python版本,大大簡化了你的工作流程。不僅可以方便地安裝、更新、解除安裝工具包,而且安裝時能自動安裝相應的依賴包,同時還能使用不同的虛擬環境隔離不同要求的專案。安裝Acaconda預設的Python是2.7;安裝Acaconda3預設的Python是3.6

下載地址

什麼是Conda

Conda是一個開源的包、虛擬環境管理器,可以用於在同一個機器上安裝不同版本的軟體包及其依賴,並能夠在不同的環境之間切換,它的包管理類似PIP。
packages 管理: 可以使用 conda 來安裝、更新 、解除安裝工具包 ,並且它更關注於資料科學相關的工具包。在安裝 anaconda 時就預先整合了像 Numpy、Scipy、 pandas、Scikit-learn 這些在資料分析中常用的包。另外值得一提的是,conda 並不僅僅管理Python的工具包,它也能安裝非python的包。比如在新版的 Anaconda 中就可以安裝R語言的整合開發環境 Rstudio。

虛擬環境管理: 在conda中可以建立多個虛擬環境,用於隔離不同專案所需的不同版本的工具包,以防止版本上的衝突。對糾結於 Python 版本的同學們,我們也可以建立 Python2 和 Python3 兩個環境,來分別執行不同版本的 Python 程式碼。

安裝和使用

安裝過程略,非常簡單,安裝完之後執行下面的命令新增源,這樣以後透過conda安裝包就走國內映象。映象大全不只是Anaconda

# 新增Anaconda的TUNA映象
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/

# 設定搜尋時顯示通道地址,這個可以不加,只是為了看一下是否從映象站下載
conda config --set show_channel_urls yes

Anaconda安裝的框架在 使用者安裝的不同python環境都會被放在目錄~/anacondaX/envs下
環境變數會被自動新增到 ~/.bash_profile/Users/steven/Anaconda
可以在命令中執行conda info -e檢視已安裝的環境,如下圖,我這裡有多個環境。

常用命令

Conda管理

# 更新anaconda
conda update conda

# 更新anaconda後設資料包
conda update anaconda

# 解除安裝Anaconda
# 編輯 ~/.bash_profile 這個檔案刪除環境變數
# 刪除 .condarc 檔案這個檔案預設沒有,只有你執行過 conda config 命令以後才會自動建立。該檔案是conda的配置檔案
# 是YAML格式。比如你可以設定安裝包的渠道,是否自動更新conda,是否允許其他渠道等設定。

Python管理

# 建立一個環境並安裝其他版本的Python,安裝其他版本為啥還要建立環境呢?因為多版本支援就是靠不同環境實現的,所以你安裝其他版本
# 一定要和某個環境關聯才可以。
# python27 是環境名稱
# python=2.7 是要安裝的包和版本
# anaconda 是建立環境時同時要安裝的包,這個可以不寫 conda create
-n python27 python=2.7 anaconda conda create -n python36 python=3.6 conda create -n python37 python=3.7 # 更新Python,進入某個環境執行下面的命令,將更新當前環境的Python到最新分支版本。比如當前是3.5,更新後將會到最新的3.X conda update python

環境管理

# 列出當前環境,環境名稱前有 * 號的表示當前環境
conda list --evns
conda env list

# 建立一個名為python34的環境,指定Python版本是3.4(不用管是3.4.x,conda會為我們自動尋找3.4.x中的最新版本)
conda create --name python34 python=3.4

# 安裝好後,使用activate啟用某個環境
activate python34 # for Windows
source activate python34 # for Linux & Mac

# 如果想返回預設的python 2.7環境,執行
deactivate python34 # for Windows
source deactivate python34 # for Linux & Mac

# 不加環境則返回預設環境
source deactivate # for Linux & Mac
deactivate # for Windows

# 匯出環境,它會把當前環境中安裝的包以及版本號都匯出去,這樣你就可以拿到另外的機器上來重新構建一個相同的環境
# 匯出的內容包括環境名稱,安裝渠道,該環境安裝的包以及版本號。
source activate python36  # 首先進入名稱叫做python36環境
conda env export > environment.yml  # 匯出當前環境到指定檔案
conda env create -f environment.yml # 透過環境檔案建立環境,不需要指定環境名稱,因為檔案中包含名稱欄位

# 移除一個名稱python36叫做環境
conda env remove --name python36

包管理

# 查詢包
conda search 包名
# 安裝包
conda install --name myenv scipy # 安裝包到指定環境中
conda install scipy # 安裝包到當前環境中
conda install scipy=0.15.0  # 安裝指定版本的包,到當前環境
conda install scipy curl # 安裝多個包
conda install -c anaconda django # -c是指定渠道名稱,也就是用哪個渠道安裝django。 # 解除安裝包 conda remove 包名 # 刪除當前環境中的指定包 conda remove
-n python34 numpy # 刪除指定環境中的指定包 # 安裝不在conda或者acaconda的包,當你安裝的包不在conda管理範圍的時候可以使用pip來安裝 conda install pip # 首先在當前環境中安裝pip pip install 包名 # 其次在透過PIP命令在當前環境中安裝包 # 更新包 conda update 包名 # 更新當前環境指定的包 conda update -n python36 numpy # 更新指定環境中的指定包 # 檢視當前已經安裝的packages conda list conda list -n python36 # 檢視指定環境中安裝的所有包

說明:對於那些無法透過conda安裝或者從Anaconda.org獲得的包,我們通常可以用pip來安裝包。

pip只是一個包管理器,所以它不能為你管理環境。pip甚至不能升級python,因為它不像conda一樣把python當做包來處理。但是它可以安裝一些conda安裝不了的包,pip和conda都整合在Anaconda或miniconda裡邊。

另外你還可以去 官網 搜尋

 

按照命令去安裝

.condarc檔案說明

檔案這個檔案預設沒有,只有你執行過 conda config 命令以後才會自動建立。該檔案是conda的配置檔案,是YAML格式。比如你可以設定安裝包的渠道,是否自動更新conda,是否允許其他渠道等設定。下面是我的配置檔案說明。這些不是必須的。但是在國內建議設定channels,這個在上面已經說過。所以通常你不需要關注這個檔案。

channels:
 - defaults
show_channel_urls: true
default_channels:
 - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
 - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free
 - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r
custom_channels:
 conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
 msys2: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
 bioconda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
 menpo: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
 pytorch: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
 simpleitk: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud

在channels裡面加入國內的渠道,另外配置一個 - defaults,含義是在國內渠道找不到時會去預設渠道去找。

相關文章