Conda 簡介
Conda 是一個開源的包管理系統和環境管理系統,可在 Windows、macOS 和 Linux 上運行。 Conda 可快速安裝、運行和更新包及其依賴項。 Conda 可以輕松地在計算機上創建、保存、加載和切換環境。 它是為 Python 程序而創造的,但它可以打包和分發任何語言的軟件。
簡單來說,conda可以讓我們一行命令安裝更新卸載程序,以及進行環境管理。
下圖是一個實際的例子。我用conda 創建了兩個虛擬環境:R4 和R41,分別用於運行4.0 和 4.1 的R。而且在各自對應的環境中,安裝了相應版本的R包。 下圖是vs code界面,我可以很方便的在多個版本間切換, 同時創建多個R控制台,極大提高了效率。(vs code可以通過ssh 連接服務器,所以我現在都很少用RStudio server了。)

Conda 安裝
conda 是包含在 Anaconda 里的。我們安裝了Anaconda就可以使用Conda了。
Anaconda是一個免費開源的Python和R語言的發行版本,用於計算科學(數據科學、機器學習、大數據處理和預測分析),Anaconda致力於簡化軟件包管理系統和部署。Anaconda的包使用軟件包管理系統Conda進行管理。
Anaconda 有個人版,商業版,企業版,團隊版。我們使用個人版,因為其他版本要錢。去https://www.anaconda.com/products/individual 下載。本文,主要在Linux下演示,所以下載Linux版本的。

網絡不好,可以去清華鏡像下載:
https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/?C=M&O=D
通過在瀏覽器點擊鏈接下載,或者復制下載鏈接來,在命令行下載
## 下載
$ wget -c https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-2021.05-Linux-x86_64.sh
## 查看
$ ls
Anaconda3-2021.05-Linux-x86_64.sh
安裝通過bash 運行
$ bash Anaconda3-2021.05-Linux-x86_64.sh
下面是一些安裝過程中的提示:

按回車鍵(Enter)。

按回車鍵,慢慢跳過。或者按q。

輸入yes,回車

設置安裝地址, 默認是 ">>>" 前面那個地址。使用默認地址,直接回車若自定義按照地址,在">>>"后面輸入新的的地址。這里我直接回車

是否conda init 官方推薦yes, 我也yes 回車。不yes的話,你之后得手動設置一下才能用conda
🤷♀️
之后就安裝成功了。不過最好運行一個命令
$ conda config --set auto_activate_base false
anaconda 安裝好后,默認有一個 base 的環境。不運行上面那命令的情況,每次你打開命令行,終端,都會激活base環境。在anaconda 的環境下,運行命令,會優先調用anaconda環境下的程序。
比如下圖例子,在系統環境下和anaconda base環境下, 兩者的python3 地址是不一樣的。anaconda 激活環境后,是會在終端前面看到類似這種 " (環境名) "

Channel 管理
Conda channels 是 軟件存儲的位置,相當於遠程軟件倉庫。每次conda 軟件下載時,都會從遠程channel尋找相應的軟件。比如bioconda ,一個專門存放生信軟件的channel。
默認遠程channel都在國外服務器。很多時候,我們下載安裝軟件都很慢。所以,我們可能需要修改下默認的channel設置,指向國內。
Channel 查看
$ conda config --show channels
channels:
- defaults
Channel 添加
$ conda config --add channels bioconda
$ conda config --add channels conda-forge
對於官方的channel, 添加channel 名就可以了。若是添加鏡像channel 需要提供URL
$ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda/
查看添加的channels:
$ conda config --get channels
--add channels 'defaults' # lowest priority
--add channels 'bioconda'
--add channels 'conda-forge'
--add channels 'https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda/' # highest priority
后添加的channel 有更高的優先級, 即在檢索軟件時,會優先檢索更高優先級的channel.
清華鏡像
上面一個一個添加,有點麻煩,我們就直接使用清華鏡像站的提供的channel配置。
打開 ~/.condarc 文件,沒有就創建一個。添加下面的內容。
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/r
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
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
然后運行下清除索引緩存,保證用的是鏡像站提供的索引。
conda clean -i
環境管理
base 環境,建議不要隨意的安裝程序了。可以根據日常需要創建一些特定的環境來安裝程序。我平常一些組學的的軟件都會安裝到了ngs這個環境中。 運行R ,我創建了兩個環境 R4 和R41 分別用於R 4.0 和 R 4.1 的R軟件運行。(其實之前還有個叫R 環境,被搞壞了,就刪了。)
環境創建
創建一個叫test 的環境
### -n 環境名
$ conda create -n test
激活/退出環境
$ conda activate test
$ conda deactivate

環境克隆
環境克隆,就復制一個環境,做個備份。在安裝了許多軟件后,可以考慮備份一下環境。因為環境使用久了,軟件安裝的越來越多,指不定哪個時候因為某些操作,軟件安裝就把當前環境弄出問題了。有個備份還是好的,避免重新安裝。
你也可以把它當作環境的重命名。在刪除老環境后。
克隆test 環境為ngs 環境
$ conda create -n ngs --clone test
刪除環境
$ conda remove -n test --all
查看環境
$ conda env list
# conda environments:
#
base * /home/user/anaconda3
ngs /home/user/anaconda3/envs/ngs
軟件管理
可用安裝軟件查找
不是每個軟件用conda 都能下載安裝的。所以用conda安裝軟件前,應該檢索下該軟件是否能被conda 安裝。
我們可以直接在搜索引擎 搜索 conda 軟件名,比如要安裝bedtools:

一般,能搜到,代表可以安裝的。
還可以通過conda 命令搜索。
conda search bedtools -c bioconda

相比命令行,瀏覽器,可能更加智能一點, 對錯誤的輸入有一定魯棒性。
軟件安裝
要是用瀏覽器搜索的話,打開第一個鏈接, 打開的頁面就有安裝命令
### 在ngs環境下安裝使用
conda activate ngs
### -y 確認安裝
### -c 選擇額外通道bioconda
$ conda install -y -c bioconda bedtools
安裝指定版本
conda install -y -c bioconda bedtools=2.30.0
安裝后,我們可以簡單確認下是否正確的安裝
$ which bedtools
/home/user/anaconda3/envs/ngs/bin/bedtools
新創建的環境,都在 envs/目錄下
查看已安裝軟件
$ conda list
# packages in environment at /home/user/anaconda3/envs/ngs:
#
# Name Version Build Channel
_libgcc_mutex 0.1 main defaults
_openmp_mutex 4.5 1_gnu defaults
bedtools 2.30.0 h7d7f7ad_1 bioconda
bzip2 1.0.8 h7b6447c_0 defaults
libgcc-ng 9.3.0 h5101ec6_17 defaults
libgomp 9.3.0 h5101ec6_17 defaults
libstdcxx-ng 9.3.0 hd4cf53a_17 defaults
xz 5.2.5 h7b6447c_0 defaults
zlib 1.2.11 h7b6447c_3 defaults
軟件更新
conda update bedtools
軟件刪除
$ conda remove bedtools
#### 之后會提示是否確認刪除。輸入y就好了
Conda 加速
conda有時使用時會發現很慢的。這里提供一些方案供參考:
鏡像設置
我猜國內用戶,使用conda 慢的的原因,大部分是因為網絡問題吧, 參考上面Channel管理,設置下channel鏡像。
channel管理
channel 是 軟件存儲的位置。而conda 安裝軟件時,會從已設置的channel 里尋找軟件。不同的通道可能有相同的包。 有多少個channel,它去多少個channel里尋找軟件。
不任意添加channel
舉個例子,在查詢requests時,conda只會查詢當前設置的channel。當我們再添加一個channel時,conda就會查詢添加的。
$ conda search requests
Loading channels: done
# Name Version Build Channel
requests 2.18.4 py27hc5b0589_1 anaconda/pkgs/main
requests 2.18.4 py35hb9e6ad1_1 anaconda/pkgs/main
requests 2.18.4 py36he2e5f8d_1 anaconda/pkgs/main
requests 2.19.1 py27_0 anaconda/pkgs/main
requests 2.19.1 py35_0 anaconda/pkgs/main
requests 2.19.1 py36_0 anaconda/pkgs/main
## 添加一個channel, 測試完這個,我就把這個channel從~/.condarc里刪除了
$ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/
$ conda search requests
Loading channels: done
# Name Version Build Channel
requests 2.9.2 py27_0 conda-forge
requests 2.9.2 py34_0 conda-forge
......
requests 2.18.4 py27hc5b0589_1 anaconda/pkgs/main
requests 2.18.4 py35_0 conda-forge
requests 2.18.4 py35_1 conda-forge
requests 2.18.4 py35hb9e6ad1_1 anaconda/pkgs/main
requests 2.18.4 py36_0 conda-forge
requests 2.18.4 py36_1 conda-forge
requests 2.18.4 py36he2e5f8d_1 anaconda/pkgs/main
所以因此,我們容易想到,不要隨意的添加channel, 因為添加的越多。conda需要查詢的channel 就越多,導致
速度變慢。添加鏡像時,添加幾個速度快的,核心的,包含常用的軟件的安裝的channel。就行了。
指定channel
除了添加channel 外,我們也可以在命令行指定某個channel。
$ conda search r-rsqlite
Loading channels: done
# Name Version Build Channel
r-rsqlite 1.0.0 r3.1.3_0 anaconda/pkgs/r
r-rsqlite 1.0.0 r3.1.3_0a anaconda/pkgs/r
r-rsqlite 1.0.0 r3.2.0_1 anaconda/pkgs/r
r-rsqlite 1.0.0 r3.2.0_1a anaconda/pkgs/r
$ conda search r-rsqlite -c conda-forge
Loading channels: done
# Name Version Build Channel
r-rsqlite 1.0.0 r3.1.3_0 anaconda/pkgs/r
r-rsqlite 1.0.0 r3.1.3_0a anaconda/pkgs/r
....
r-rsqlite 1.0.0 r3.3.1_2 anaconda/pkgs/r
r-rsqlite 1.1_1 r3.3.1_0 anaconda/pkgs/r
r-rsqlite 1.1_1 r3.3.2_0 anaconda/pkgs/r
r-rsqlite 1.1_2 r3.3.2_0 conda-forge
r-rsqlite 1.1_2 r3.4.1_0 conda-forge
$ conda search r-rsqlite -c conda-forge --override-channels
Loading channels: done
# Name Version Build Channel
r-rsqlite 1.1_2 r3.3.2_0 conda-forge
r-rsqlite 1.1_2 r3.4.1_0 conda-forge
r-rsqlite 2.0 r3.3.2_0 conda-forge
r-rsqlite 2.0 r3.4.1_0 conda-forge
r-rsqlite 2.0 r341hfc679d8_1 conda-forge
r-rsqlite 2.1.1 r341h9d2a408_0 conda-forge
-c/--channel 是添加額外查詢軟件的channel, 並不是指定查詢channel。 若要指定為查詢channel 可以再添加個參數--override-channels
設置channel 優先級
不同的通道可能有相同的包, 而conda 需要解決不同通道相同包的沖突問題。所以conda 查詢channel 時有個優先級的概念。
$ conda config --describe channel_priority
# # channel_priority (ChannelPriority)
# # Accepts values of 'strict', 'flexible', and 'disabled'. The default
# # value is 'flexible'. With strict channel priority, packages in lower
# # priority channels are not considered if a package with the same name
# # appears in a higher priority channel. With flexible channel priority,
# # the solver may reach into lower priority channels to fulfill
# # dependencies, rather than raising an unsatisfiable error. With channel
# # priority disabled, package version takes precedence, and the
# # configured priority of channels is used only to break ties. In
# # previous versions of conda, this parameter was configured as either
# # True or False. True is now an alias to 'flexible'.
# #
# channel_priority: flexible
設置channel priority 為 strict, 對於相同軟件名,只會考慮最高優先級的channel。Conda 4.6.0 開始有了strict 特性。strict 的通道優先級可以顯着加快 conda 操作並減少包不兼容問題。 官方建議將其作為默認設置。但是,它可能會破壞舊的環境文件。所以可能在Conda 5.0 時, 官方可能計划將其設置為 conda 的默認設置。
現在的話, 對於才開始用conda 的同學來說,可以考慮設為strict
$ conda config --set channel_priority strict
使用Mamba
Mamba 使用C++對conda 的重實現:
- 支持並行下載,對包文件多線程處理
- 用libsolv 來更快的解決軟件依賴關系
- C++ 實現軟件核心功能,來獲取更大效率
mamba 用法和conda 一樣。除了 激活/退出環境,需要用 conda 外。其余一樣。
mamba 安裝
$ conda install mamba -n base -c conda-forge
其他
指定軟件版本
在安裝軟件時,指定版本號安裝。
$ conda install bedtools=2.30.0 -c bioconda
新環境安裝軟件
創建一個新的環境,來安裝軟件。
參考
https://zh.wikipedia.org/wiki/Anaconda_(Python%E5%8F%91%E8%A1%8C%E7%89%88)#cite_note-2
https://docs.conda.io/projects/conda/en/latest/
https://www.jianshu.com/p/edaa744ea47d
https://www.anaconda.com/blog/understanding-and-improving-condas-performance
