Conda 是⼀個開源的軟體包管理系統和環境管理系統,用於安裝多個版本的軟體包及其依賴關係,並在它們之間輕鬆切換。Conda 主要是為 Python 程序創建的,適⽤於 Linux,OS X 和Windows,也可以打包和分發其他軟體,如R和Scala。
對於長期使用python的同學來說,⼀定遇到過不少頭疼的python環境配置問題。不同的項⽬可能⽤了不同的python版本,而且也用了不同版本的開源python包。
如果所有項⽬都放在系統默認的python環境中運行,很容易出現Python版本和包衝突的問題。而conda,就是來解決這個問題的。Conda通常可以通過下載Anaconda或者Miniconda進行安裝。
當我們需要面對多個版本的python和開源包時,就應該根據⼯作項目或者⽤途來新建對應版本的Python的虛擬環境。對於Conda來說,新建環境十分簡單:
1
conda create -n py37 anaconda tensorflow=1.15 lightgbm python=3.7上面的語句創建了⼀個名叫py37的環境,並且要求環境內的Python為3.7版本並安裝1.15版本的tensorflow和與之兼容的最新版anaconda與lightgbm。相⽐於Pip,Conda會⾃動幫我們解決包衝突的問題,所有安裝的包,都會和指定版本的包相兼容。
1 2
在安裝好後,我們使用conda activate命令激活對應的環境,就可以開始⼯作了。此時IDE中也可以識別出我們新建的環境。
1 2 3
如果想安裝或更新包到特定版本,可以在conda activate對應環境後,使⽤conda install安裝/更新。另外需要注意的是,⼀些包,比如xgboost在conda頻道中的名稱會不⼀樣,可以先搜索確認⼀下。如果想要更新到最新,就要使⽤conda update --all。
另外,對於conda中不存在但pip中存在的包,可以直接使⽤pip安裝。但pip安裝的包不會進⾏兼容性檢查,因此安裝包時,通常推薦優先使⽤conda安裝。
1 2
如果環境的包出現了衝突,抑或是已經完成了它的使命,我們就可以採⽤remove命令移除這個環境了。需要配置新的環境時,就再回過頭create⼀個即可。這樣可以最⼤程度的保證環境內包的⼀致性。
① 添加頻道
Conda的默認配置屬於開箱即用的類型,但如果我們想要更好⽤,還有⼀些設定需要注意。
Conda默認的包頻道是Anaconda公司的默認頻道。另外還存在⼀個開源頻道:conda-forge。condaforge的包往往⽐官⽅更新更快,也更全,通常我們會直接把頻道加⼊到conda的默認設置⾥。對於其他自己維護的頻道,⽐如pytorch,如果需要,我們也可以自行添加。
1 2
另外,如果Conda在國內更新很慢,可以搜索anaconda清華源添加清華大學的國內鏡像進行包的更新。
② 環境遷移
如果我們想要把⼀個conda環境和對應版本的包遷移到別的機器上,那就首先需要導出環境:
1 2 3
然後在新機器上重建環境:
1 2 3
③ 離線環境重建
如果出於某些原因需要在離線的環境⼯作,Python的環境配置會是⼀個很頭痛的問題。但conda其實可以很⽅便的幫我們維護⼀整個相互兼容的環境。這種情況下,⾸先,我們需要找到conda的配置⽂件.condarc,通常它會位於:
如果沒有看⻅.condarc配置文件,就運行一次conda config。
然後,我們需要在.condarc裡修改conda緩存包的地址pkgs_dirs,把這個地址變為我們想要存放下載的python包的地址,在離線的機器上我們也進⾏同樣的操作來指定conda的緩存路徑。把conda緩存下來的包導入到離線環境的緩存路徑下,是建立⼀個完整的python環境的關鍵。
1 2
在改好.condarc配置文件後,我們就可以下載我們想要的包了,不過此時,需要帶上⼀個關鍵的參數: --download-only
1 2 3 4
在下載後,將之前設定的conda緩存⽬錄上傳到離線環境中,並在離線環境中也設定.condarc中conda
緩存目錄為對應的目錄。此時運行:
1 2 3 4
就可以只用conda緩存中的文件,⽆需聯網,就能成功安裝對應庫到離線環境中了。
到這裡,本文就結束了。在筆者看來,Conda是⼀個非常優秀的環境管理器,完全可以與virtualenv等python環境管理器⼀較高下。但國內介紹Conda的⽂章較少,在python的使⽤者中過於低調⽽不為⼈所知。
在實際運用Python的工作中,環境管理應該是在現在和未來是⼀個無法迴避的命題。希望本文能給你⼀個python環境管理的全新視角,給你的工具箱裡增添⼀把新的環境配置利器。