conda基本使用

Conda 簡介

Conda 是一個(gè)開源的包管理系統(tǒng)和環(huán)境管理系統(tǒng),可在 Windows、macOS 和 Linux 上運(yùn)行。 Conda 可快速安裝、運(yùn)行和更新包及其依賴項(xiàng)。 Conda 可以輕松地在計(jì)算機(jī)上創(chuàng)建、保存、加載和切換環(huán)境。 它是為 Python 程序而創(chuàng)造的,但它可以打包和分發(fā)任何語言的軟件。

簡單來說,conda可以讓我們一行命令安裝更新卸載程序,以及進(jìn)行環(huán)境管理。

下圖是一個(gè)實(shí)際的例子。我用conda 創(chuàng)建了兩個(gè)虛擬環(huán)境:R4 和R41,分別用于運(yùn)行4.0 和 4.1 的R。而且在各自對(duì)應(yīng)的環(huán)境中,安裝了相應(yīng)版本的R包。 下圖是vs code界面,我可以很方便的在多個(gè)版本間切換, 同時(shí)創(chuàng)建多個(gè)R控制臺(tái),極大提高了效率。(vs code可以通過ssh 連接服務(wù)器,所以我現(xiàn)在都很少用RStudio server了。)

image.png

Conda 安裝

conda 是包含在 Anaconda 里的。我們安裝了Anaconda就可以使用Conda了。

Anaconda是一個(gè)免費(fèi)開源的Python和R語言的發(fā)行版本,用于計(jì)算科學(xué)(數(shù)據(jù)科學(xué)、機(jī)器學(xué)習(xí)、大數(shù)據(jù)處理和預(yù)測分析),Anaconda致力于簡化軟件包管理系統(tǒng)和部署。Anaconda的包使用軟件包管理系統(tǒng)Conda進(jìn)行管理。

Anaconda 有個(gè)人版,商業(yè)版,企業(yè)版,團(tuán)隊(duì)版。我們使用個(gè)人版,因?yàn)槠渌姹疽X。去https://www.anaconda.com/products/individual 下載。本文,主要在Linux下演示,所以下載Linux版本的。

image.png

網(wǎng)絡(luò)不好,可以去清華鏡像下載:

https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/?C=M&O=D

通過在瀏覽器點(diǎn)擊鏈接下載,或者復(fù)制下載鏈接來,在命令行下載

## 下載
$ 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 運(yùn)行

$ bash Anaconda3-2021.05-Linux-x86_64.sh

下面是一些安裝過程中的提示:


image.png

按回車鍵(Enter)。


image.png

按回車鍵,慢慢跳過?;蛘甙磓。


image.png

輸入yes,回車


image.png

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


image.png

是否conda init 官方推薦yes, 我也yes 回車。不yes的話,你之后得手動(dòng)設(shè)置一下才能用conda
??♀?

之后就安裝成功了。不過最好運(yùn)行一個(gè)命令

$ conda config --set auto_activate_base false

anaconda 安裝好后,默認(rèn)有一個(gè) base 的環(huán)境。不運(yùn)行上面那命令的情況,每次你打開命令行,終端,都會(huì)激活base環(huán)境。在anaconda 的環(huán)境下,運(yùn)行命令,會(huì)優(yōu)先調(diào)用anaconda環(huán)境下的程序。

比如下圖例子,在系統(tǒng)環(huán)境下和anaconda base環(huán)境下, 兩者的python3 地址是不一樣的。anaconda 激活環(huán)境后,是會(huì)在終端前面看到類似這種 " (環(huán)境名) "


image.png

Channel 管理

Conda channels 是 軟件存儲(chǔ)的位置,相當(dāng)于遠(yuǎn)程軟件倉庫。每次conda 軟件下載時(shí),都會(huì)從遠(yuǎn)程channel尋找相應(yīng)的軟件。比如bioconda ,一個(gè)專門存放生信軟件的channel。
默認(rèn)遠(yuǎn)程channel都在國外服務(wù)器。很多時(shí)候,我們下載安裝軟件都很慢。所以,我們可能需要修改下默認(rèn)的channel設(shè)置,指向國內(nèi)。

Channel 查看

$ conda config --show channels
channels:
  - defaults

Channel 添加

$ conda config --add channels bioconda
$ conda config --add channels conda-forge

對(duì)于官方的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 有更高的優(yōu)先級(jí), 即在檢索軟件時(shí),會(huì)優(yōu)先檢索更高優(yōu)先級(jí)的channel.

清華鏡像

上面一個(gè)一個(gè)添加,有點(diǎn)麻煩,我們就直接使用清華鏡像站的提供的channel配置。

https://mirrors.tuna.tsinghua.edu.cn/help/anaconda/

打開 ~/.condarc 文件,沒有就創(chuàng)建一個(gè)。添加下面的內(nèi)容。

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

然后運(yùn)行下清除索引緩存,保證用的是鏡像站提供的索引。

conda clean -i

環(huán)境管理

base 環(huán)境,建議不要隨意的安裝程序了??梢愿鶕?jù)日常需要?jiǎng)?chuàng)建一些特定的環(huán)境來安裝程序。我平常一些組學(xué)的的軟件都會(huì)安裝到了ngs這個(gè)環(huán)境中。 運(yùn)行R ,我創(chuàng)建了兩個(gè)環(huán)境 R4R41 分別用于R 4.0 和 R 4.1 的R軟件運(yùn)行。(其實(shí)之前還有個(gè)叫R 環(huán)境,被搞壞了,就刪了。)

環(huán)境創(chuàng)建

創(chuàng)建一個(gè)叫test 的環(huán)境
### -n 環(huán)境名
$ conda create -n test

激活/退出環(huán)境

$ conda activate test
$ conda deactivate
image.png

環(huán)境克隆

環(huán)境克隆,就復(fù)制一個(gè)環(huán)境,做個(gè)備份。在安裝了許多軟件后,可以考慮備份一下環(huán)境。因?yàn)榄h(huán)境使用久了,軟件安裝的越來越多,指不定哪個(gè)時(shí)候因?yàn)槟承┎僮?,軟件安裝就把當(dāng)前環(huán)境弄出問題了。有個(gè)備份還是好的,避免重新安裝。

你也可以把它當(dāng)作環(huán)境的重命名。在刪除老環(huán)境后。

克隆test 環(huán)境為ngs 環(huán)境
$ conda create -n ngs --clone test

刪除環(huán)境

$ conda remove -n test --all

查看環(huán)境

$ conda env list
# conda environments:
#
base                  *  /home/user/anaconda3
ngs                      /home/user/anaconda3/envs/ngs

軟件管理

可用安裝軟件查找

不是每個(gè)軟件用conda 都能下載安裝的。所以用conda安裝軟件前,應(yīng)該檢索下該軟件是否能被conda 安裝。
我們可以直接在搜索引擎 搜索 conda 軟件名,比如要安裝bedtools:

image.png

一般,能搜到,代表可以安裝的。

還可以通過conda 命令搜索。

conda search bedtools -c bioconda
image.png

相比命令行,瀏覽器,可能更加智能一點(diǎn), 對(duì)錯(cuò)誤的輸入有一定魯棒性。

軟件安裝

要是用瀏覽器搜索的話,打開第一個(gè)鏈接, 打開的頁面就有安裝命令

### 在ngs環(huán)境下安裝使用
conda activate ngs
### -y 確認(rèn)安裝
### -c 選擇額外通道bioconda
$ conda install -y -c bioconda bedtools

安裝指定版本

conda install -y -c bioconda bedtools=2.30.0

安裝后,我們可以簡單確認(rèn)下是否正確的安裝

$ which bedtools
/home/user/anaconda3/envs/ngs/bin/bedtools

新創(chuàng)建的環(huán)境,都在 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

####  之后會(huì)提示是否確認(rèn)刪除。輸入y就好了

Conda 加速

conda有時(shí)使用時(shí)會(huì)發(fā)現(xiàn)很慢的。這里提供一些方案供參考:

鏡像設(shè)置

我猜國內(nèi)用戶,使用conda 慢的的原因,大部分是因?yàn)榫W(wǎng)絡(luò)問題吧, 參考上面Channel管理,設(shè)置下channel鏡像。

channel管理

channel 是 軟件存儲(chǔ)的位置。而conda 安裝軟件時(shí),會(huì)從已設(shè)置的channel 里尋找軟件。不同的通道可能有相同的包。 有多少個(gè)channel,它去多少個(gè)channel里尋找軟件。

不任意添加channel

舉個(gè)例子,在查詢requests時(shí),conda只會(huì)查詢當(dāng)前設(shè)置的channel。當(dāng)我們?cè)偬砑右粋€(gè)channel時(shí),conda就會(huì)查詢添加的。


$ 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

## 添加一個(gè)channel, 測試完這個(gè),我就把這個(gè)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

所以因此,我們?nèi)菀紫氲?,不要隨意的添加channel, 因?yàn)樘砑拥脑蕉唷onda需要查詢的channel 就越多,導(dǎo)致
速度變慢。添加鏡像時(shí),添加幾個(gè)速度快的,核心的,包含常用的軟件的安裝的channel。就行了。

指定channel

除了添加channel 外,我們也可以在命令行指定某個(gè)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 可以再添加個(gè)參數(shù)--override-channels

設(shè)置channel 優(yōu)先級(jí)

不同的通道可能有相同的包, 而conda 需要解決不同通道相同包的沖突問題。所以conda 查詢channel 時(shí)有個(gè)優(yōu)先級(jí)的概念。

$ 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

設(shè)置channel priority 為 strict, 對(duì)于相同軟件名,只會(huì)考慮最高優(yōu)先級(jí)的channel。Conda 4.6.0 開始有了strict 特性。strict 的通道優(yōu)先級(jí)可以顯著加快 conda 操作并減少包不兼容問題。 官方建議將其作為默認(rèn)設(shè)置。但是,它可能會(huì)破壞舊的環(huán)境文件。所以可能在Conda 5.0 時(shí), 官方可能計(jì)劃將其設(shè)置為 conda 的默認(rèn)設(shè)置。
現(xiàn)在的話, 對(duì)于才開始用conda 的同學(xué)來說,可以考慮設(shè)為strict

$ conda config --set channel_priority strict

使用Mamba

Mamba 使用C++對(duì)conda 的重實(shí)現(xiàn):

  • 支持并行下載,對(duì)包文件多線程處理
  • 用libsolv 來更快的解決軟件依賴關(guān)系
  • C++ 實(shí)現(xiàn)軟件核心功能,來獲取更大效率

mamba 用法和conda 一樣。除了 激活/退出環(huán)境,需要用 conda 外。其余一樣。
mamba 安裝

$ conda install mamba -n base -c conda-forge

其他

指定軟件版本

在安裝軟件時(shí),指定版本號(hào)安裝。

$ conda install bedtools=2.30.0 -c bioconda
新環(huán)境安裝軟件

創(chuàng)建一個(gè)新的環(huán)境,來安裝軟件。

參考

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/
http://www.itdecent.cn/p/edaa744ea47d
https://www.anaconda.com/blog/understanding-and-improving-condas-performance

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容