玩轉Conda,看這⼀篇就夠了

2021-02-13 RealAI

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

conda activate py37 # 激活py37環境

2

conda deactivate # 回到根環境(base)

在安裝好後,我們使用conda activate命令激活對應的環境,就可以開始⼯作了。此時IDE中也可以識別出我們新建的環境。

1

conda install py-xgboost=1.1 # 安裝/更新到特定版本

2

pip install pyhive # 安裝conda中沒有維護的包

3

conda update --all # 升級所有包

如果想安裝或更新包到特定版本,可以在conda activate對應環境後,使⽤conda install安裝/更新。另外需要注意的是,⼀些包,比如xgboost在conda頻道中的名稱會不⼀樣,可以先搜索確認⼀下。如果想要更新到最新,就要使⽤conda update --all。

‍另外,對於conda中不存在但pip中存在的包,可以直接使⽤pip安裝。但pip安裝的包不會進⾏兼容性檢查,因此安裝包時,通常推薦優先使⽤conda安裝。

1

conda remove lightgbm # 移除包

2

conda remove -n py37 --all # 移除整個環境

如果環境的包出現了衝突,抑或是已經完成了它的使命,我們就可以採⽤remove命令移除這個環境了。需要配置新的環境時,就再回過頭create⼀個即可。這樣可以最⼤程度的保證環境內包的⼀致性。


① 添加頻道

Conda的默認配置屬於開箱即用的類型,但如果我們想要更好⽤,還有⼀些設定需要注意。

Conda默認的包頻道是Anaconda公司的默認頻道。另外還存在⼀個開源頻道:conda-forge。condaforge的包往往⽐官⽅更新更快,也更全,通常我們會直接把頻道加⼊到conda的默認設置⾥。對於其他自己維護的頻道,⽐如pytorch,如果需要,我們也可以自行添加。

1

conda config --add channels conda-forge

2

conda config --append channels pytorch

另外,如果Conda在國內更新很慢,可以搜索anaconda清華源添加清華大學的國內鏡像進行包的更新。

② 環境遷移

如果我們想要把⼀個conda環境和對應版本的包遷移到別的機器上,那就首先需要導出環境:

1

conda activate py37 # 激活要導出的環境

2

conda env export > environment.yml # 導出環境配置,此種方法只能導出相同系統,如 windows機器的配置只能導出給windows使用,不能給linux使用

3

pip freeze > requirement.txt # 也可以用pip導出,此種方法不限制機器

然後在新機器上重建環境:

1

conda env create -f environment.yml # 直接利用conda重建 # 或是先安裝環境,再用pip重建

2

conda create -n py37 python=3.7 -y

3

pip install -r requirement.txt

③ 離線環境重建

如果出於某些原因需要在離線的環境⼯作,Python的環境配置會是⼀個很頭痛的問題。但conda其實可以很⽅便的幫我們維護⼀整個相互兼容的環境。這種情況下,⾸先,我們需要找到conda的配置⽂件.condarc,通常它會位於:

如果沒有看⻅.condarc配置文件,就運行一次conda config。

然後,我們需要在.condarc裡修改conda緩存包的地址pkgs_dirs,把這個地址變為我們想要存放下載的python包的地址,在離線的機器上我們也進⾏同樣的操作來指定conda的緩存路徑。把conda緩存下來的包導入到離線環境的緩存路徑下,是建立⼀個完整的python環境的關鍵。

1

pkgs_dirs:

2

- C:\conda-pkgs-cache

‍在改好.condarc配置文件後,我們就可以下載我們想要的包了,不過此時,需要帶上⼀個關鍵的參數: --download-only

1

# 通過創建環境的方式下載所有想要的包

2

conda create -n py36 anaconda pytorch tensorflow lightgbm catboost tqdm black pipreqs python=3.6 --download-only

3

# 直接下載並緩存對應的包

4

conda install tensorflow-gpu=1.15 py-xgboost --download-only

在下載後,將之前設定的conda緩存⽬錄上傳到離線環境中,並在離線環境中也設定.condarc中conda

緩存目錄為對應的目錄。此時運行:

1

# 利用緩存創建環境

2

conda create -n offline36 anaconda pytorch tensorflow lightgbm catboost tqdm black pipreqs python=3.6 --use-index-cache --offline

3

# 利用緩存安裝包

4

conda install tensorflow-gpu=1.15 py-xgboost --use-index-cache --offline

就可以只用conda緩存中的文件,⽆需聯網,就能成功安裝對應庫到離線環境中了。

到這裡,本文就結束了。在筆者看來,Conda是⼀個非常優秀的環境管理器,完全可以與virtualenv等python環境管理器⼀較高下。但國內介紹Conda的⽂章較少,在python的使⽤者中過於低調⽽不為⼈所知。

在實際運用Python的工作中,環境管理應該是在現在和未來是⼀個無法迴避的命題。希望本文能給你⼀個python環境管理的全新視角,給你的工具箱裡增添⼀把新的環境配置利器。

相關焦點

  • conda管理生信軟體一文就夠
    創建小環境安裝軟體前,先設置一個小環境,不要直接在自己帳戶的當前環境內安裝軟體;怎麼理解這句話呢?# 創建一個小環境名為rnaconda install python=2# 安裝python 2版本# 以上兩句話可以等同於一句命令:conda create -n rna python=2查看小環境conda info -econda info --envsconda env list# 都是來查看已經存在小環境名的
  • QGIS+Conda+jupyter玩轉Python GIS
    在已經正確安裝和配置anaconda或miniconda的機器上,在終端執行conda create -n QGIS python=3.7 -y來建立一個Python虛擬環境,這裡選擇3.7版本的Python。
  • conda+jupyter玩轉數據科學環境搭建
    完成安裝後我們進入控制臺輸入conda --version檢查是否成功安裝:C:\Users\hp>conda --versionconda 4.8.2輸入;可以發現這時命令行開頭多了(python_spatial),這代表我們已經進入激活的python_spatial環境中。
  • Conda太慢?試試這個加速工具!
    2 Mamba的使用2.1 初識Mamba 首先我們需要安裝Mamba,既然是用來加速Conda,那麼我們可以直接使用下列命令來安裝Mamba:conda install -c conda-forge mamba
  • 【入門基礎】conda+jupyter玩轉數據科學環境搭建
    versionconda 4.8.2輸入conda env list查看當前存在的所有環境:C:\Users\hp>conda env list# conda environments:#base
  • conda第一步,你確定安裝成功了嗎?
    conda的下載和安裝見conda或者見生信技能書推文conda管理生信軟體一文就夠安裝軟體結束後,會出現三個done但是也只能說明軟體安裝正常結束,但是不能說明軟體能正常使用。尤其有些需要調py的一些包的時候,會出錯,或者python版本不兼容,在使用軟體的時候,軟體即會出現異常報錯。
  • 閱讀量過萬的conda使用總結,跨越一年的更新
    (2019-4-29 update:這個網址已經掛掉了,請改用https://anaconda.org/bioconda/repo)然後她很可愛的問我conda怎麼裝。。果斷就把這篇教程丟給她了,但是發現現在的用法和以前的不是很一樣了,所以就把原來的教程更新了一下以饗讀者。
  • 測試conda鏡像問題
    /xonsh/conda.xshno change     /home/ubuntu/miniconda3/etc/profile.d/conda.cshmodified      /home/ubuntu/.bashrc這個文件被修改的很複雜,一般人可能是看不懂的,當然,也不需要懂。
  • Conda入門教程
    官網地址:https://docs.conda.io/en/latest/Conda的安裝Conda的安裝可以通過Miniconda和Anaconda這兩個安裝程序實現。執行conda list確認安裝是否完成:Conda的概念Conda package一個Conda package本質就是一個tarball包或者一個.conda文件。
  • conda安裝與使用
    create -n rnaseq   #創建conda小環境 - -n 用來指定環境的名稱conda create -n database python=3.7.3    #指定環境中需要帶的python的版本 conda activate rnaseq     # 啟動小環境conda deactivate           #退出小環境
  • conda常見用法
    安裝參考我的這篇文章即可,Ubuntu20.04 安裝 Anaconda[1]常見用法Ⅰ.
  • conda最佳實踐
    我知道這聽起來很糟糕——發生這種情況的主要原因是,隨著時間的推移,你會不停地升級conda,但它很可能會與舊的環境不兼容。另外,隨著時間的推移,你還會不停地修改環境,而環境通常又會繼續成長,這使得conda最終變得不可理喻(而且運行更慢)。小心使用NFS系統管理員和devops通常會為多用戶安裝集中的conda環境。
  • 你不得不懂的conda和pip --還在找conda與pip?三分鐘全掌握
    當程序運行時,需要「解釋器」將程序文本語言翻譯轉變成計算機能理解的機器語言,這個翻譯過程有兩類,一類是程序在運行之前就轉變成機器語言,這種叫編譯,典型的就是c/c++語言,最後執行的是編譯後的可執行文件;第二類是程序在運行過程中邊運行邊翻譯,逐行解釋,這就是python的翻譯過程。
  • conda安裝生物信息分析軟體
    首先為什麼要寫這篇文檔,最近看到某公眾號一篇教大家如何通過conda配置生信分析軟體的付費文檔都能大放異彩
  • 一張圖搞定Conda家族
    Miniconda Miniconda 文檔:https://docs.conda.io/en/latest/miniconda.htmlAnaconda 的精簡版,主要包括了conda, Python,和其他一些有用的包(pip, zlib,等等),如果想安裝其他包,用conda install command,可以安裝Anaconda裡面的包。
  • conda 基本操作及原理
    答案見下表:對比項說明Miniconda只包括 conda,Python 和它們的依賴包。Anaconda包括 conda,conda-build,Python 和超過 150 個自動安裝的科學包及其依賴。
  • 一招解決Conda安裝卡在solving environment這一步!
    如何提速Conda採用最新版的conda (Conda4.7相比Conda4.6提速3.5倍, Conda 4.8應該不會比4.7慢)安裝時指定版本減少搜索空間 conda install python=3.7.4安裝R包時指定R的版本也會極大減小搜索空間 (R包因其數目眾多,也是生物類軟體依賴解析較慢的原因之一) conda
  • conda_初級使用
    conda簡介Conda 是一個開源的軟體包管理系統和環境管理系統
  • 生信小秘:conda
    如果第2步安裝時,最後選擇了yes,那麼可跳過這一步,因為你每次登錄的時候,conda已經啟動好了base環境,不需要自己激活conda來使用其命令進行操作。#注意激活conda與激活虛擬環境不一樣哦#如果選擇了no,開始使用conda時,就需要先激活conda。
  • 管理conda environments
    使用當我們創建好一個env之後,需要切換進去,才可以在裡面操作,包括安裝和使用packages, 典型的使用一個env的過程如下# 切換進去conda activate myenv# 安裝包conda install scipy