一文學會conda基本使用


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了。)

image.png

Conda 安裝

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

Anaconda是一個免費開源的Python和R語言的發行版本,用於計算科學(數據科學、機器學習、大數據處理和預測分析),Anaconda致力於簡化軟件包管理系統和部署。Anaconda的包使用軟件包管理系統Conda進行管理。

Anaconda 有個人版,商業版,企業版,團隊版。我們使用個人版,因為其他版本要錢。去https://www.anaconda.com/products/individual 下載。本文,主要在Linux下演示,所以下載Linux版本的。
image.png

網絡不好,可以去清華鏡像下載:

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

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

按回車鍵(Enter)。
image.png

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

輸入yes,回車
image.png

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

是否conda init 官方推薦yes, 我也yes 回車。不yes的話,你之后得手動設置一下才能用conda
​🤷‍♀️

之后就安裝成功了。不過最好運行一個命令

$ conda config --set auto_activate_base false

anaconda 安裝好后,默認有一個 base 的環境。不運行上面那命令的情況,每次你打開命令行,終端,都會激活base環境。在anaconda 的環境下,運行命令,會優先調用anaconda環境下的程序。

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

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配置。

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

打開 ~/.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 ,我創建了兩個環境 R4R41 分別用於R 4.0 和 R 4.1 的R軟件運行。(其實之前還有個叫R 環境,被搞壞了,就刪了。)

環境創建

創建一個叫test 的環境
### -n 環境名
$ conda create -n test

激活/退出環境

$ conda activate test
$ conda deactivate

image.png

環境克隆

環境克隆,就復制一個環境,做個備份。在安裝了許多軟件后,可以考慮備份一下環境。因為環境使用久了,軟件安裝的越來越多,指不定哪個時候因為某些操作,軟件安裝就把當前環境弄出問題了。有個備份還是好的,避免重新安裝。

你也可以把它當作環境的重命名。在刪除老環境后。

克隆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:
image.png

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

還可以通過conda 命令搜索。

conda search bedtools -c bioconda

image.png

相比命令行,瀏覽器,可能更加智能一點, 對錯誤的輸入有一定魯棒性。

軟件安裝

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

### 在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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM