可重複的生信分析系列二:Conda的介紹
- 2020 年 3 月 30 日
- 筆記
可重複的生信分析一直是未來的趨勢。如果實現可重複的生信分析,關鍵在於分析軟件版本的控制,一致的環境設置還有良好的分析流程的記錄。Conda可以說是版本控制和生信工具安裝的一大神器。相信大家對它了解肯定不少,但是又該怎麼樣利用它,進行可重複的分析呢?今天繼續講第二部分 Conda的介紹
。
本節教程將會使用到docker,去安裝minconda的鏡像。如果你還沒看我docker的教程,強烈建議你先回顧一下:
什麼是Conda?
基本介紹與其特點
從Conda的官方文件中找到了下面這一段解析:
Conda是在Windows,macOS和Linux上運行的開源軟件管理系統和環境管理系統。Conda可以快速安裝,運行和更新軟件包及其依賴的環境與工具。Conda可以輕鬆地在本地計算機上的環境中創建,保存,加載和切換。它是為Python程序創建的,但可以適用於任何語言的軟件。
如果你在安裝生物信息學工具之前遇到過依賴性問題,Conda會輕而易舉幫助您解決這一問題。此外,Conda使安裝和使用不兼容的工具變更加容易。因為它可以創建不同的虛擬環境,使得不兼容的工具在相對獨立的環境中運行,兩者之間不衝突和打架。
關於幾個conda
什麼是Anaconda?
Anaconda是Conda的發行的一個安裝包。它是一個數據科學平台,其中包含許多軟件包(有點太多了個人認為)。
什麼是Miniconda?
就如其名,Miniconda是Conda的最小安裝程序。可以看作是小型版本的Anaconda,僅包含Conda,Python,它們依賴的軟件包以及少量其他有用的軟件包,包括pip,zlib和其他一些軟件包。對於生信分析而言,個人更喜歡使用Miniconda並僅安裝所需的工具。
什麼是Bioconda?
Bioconda是conda生物信息學軟件的託管平台。Conda通道只是存儲軟件包的位置。但Bioconda管道上提供了使用最廣泛的生物信息工具,該工具託管了超過6,000多種生物信息包。
使用docker安裝,使用conda
將上節課所學的知識運用,使用docker來安裝conda:
docker pull continuumio/miniconda3
使用docker,運行新的conda container:
# run new container
docker run -it --rm continuumio/miniconda bash
運行上面的命令後,可以看到類似於這樣的terminal:
(base) root@c94ca01d4fdb:/#
像其它工具一樣,直接輸入conda並且不帶任何參數,就可以得到其幫助文檔:
conda
usage: conda [-h]
[-V] command ...
conda is a tool for managing and deploying applications, environments and packages.
Options:
positional arguments:
command
clean Remove unused packages and caches.
config Modify configuration values in
.condarc.
This
is modeled
after the git config command.
Writes to the user .condarc
file (/root/.condarc)
by
default.
create Create a new conda environment from a list of specified
packages.
help Displays a list of available conda commands and their help
strings.
info Display information about current conda install.
init Initialize conda for shell interaction.
[Experimental]
install Installs a list of packages into a specified conda
environment.
list List linked packages in a conda environment.
-
package
Low-level conda package utility.
(EXPERIMENTAL)
remove Remove a list of packages from a specified conda environment.
uninstall Alias
for conda remove.
run Run an executable in a conda environment.
[Experimental]
search Search
for packages and display associated information.
The
input is a MatchSpec, a query language for conda packages.
-
See examples below.
update Updates conda packages to the latest compatible version.
upgrade Alias
for conda update.
optional arguments:
-
-h,
--help Show
this help message and
exit.
-
-V,
--version Show the conda version number and
exit.
conda commands available from other packages:
env
conda的版本
在安裝工具前,先確保我們使用的conda版本是最新的:
### 查看當前版本
conda --version
conda 4.8.2
###進行升級,會彈出需要你輸入y的確認信息
conda update conda
###再次查看更新後的版本
conda --version
conda 4.8.3
###另外,你還可以將所有conda的包更新為最新兼容的版本(可選的)
conda update --all
對於conda下載的緩存臨時文件,可以定期通過 conda clean
進行清理:
conda clean -a
使用conda安裝生物信息軟件bcftools
在沒有conda之前,我們需要 通過一系列的操作,才能完成安裝:
相比之下,使用Bioconda的管道進行安裝就容易得多了:
### 使用Bioconda的管道進行安裝
conda install -c bioconda bcftools
###下載測試文件
cd /tmp
wget https://github.com/davetang/learning_vcf_file/raw/master/aln_consensus.bcf
# 查看前面兩個的SNP信息
bcftools view -v snps aln_consensus.bcf | grep -v "^#"
| head -2
1000000
336
. A G 221.999
. DP=112;VDB=0.756462;SGB=-0.693147;MQ0F=0;AF1=1;AC1=2;DP4=0,0,102,0;MQ=60;FQ=-281.989 GT:PL 1/1:255,255,0
1000000
378
. T C 221.999
. DP=101;VDB=0.704379;SGB=-0.693147;MQ0F=0;AF1=1;AC1=2;DP4=0,0,99,0;MQ=60;FQ=-281.989 GT:PL 1/1:255,255,0
Conda的環境管理
相信大部分的小夥伴對上面提到的分析都應該了如指掌了,但是conda在可重複的生信分析中,究竟能起到一個什麼的作用,下面請聽我細說:
什麼是Conda的環境? 其環境有什麼用?
使用Conda,你可以為某個項目或者某個分析創建一個獨特隔離的環境。換個意思,所謂的環境就是一組可在一個或多個項目中使用的軟件包。Miniconda的默認環境是base環境。
我強烈不建議在同一環境中安裝所有軟件包/工具。這個是很多新手玩家會犯的錯誤。很多剛剛入門生信的初學者,都會一個勁的在base的環境里,安裝各種各樣他們所需的工具。因為貪圖簡便,一個 conda install
就覺得自己可以走天下了。但是隨着軟件越裝越多,因為不同的軟件所需的依賴包不同,就會造成當你安裝某個軟件後,你之前安裝的一些軟件就無法運行了。舉個例子,比如有些軟件是依賴python3的,但是有一些是依賴python2,當你安裝新的軟件時,conda會自動幫你把當前的環境轉換成你該工具所依賴的環境。這樣一來,就相當於拆東牆補西牆,很多軟件都互相打架了,然後實在沒辦法了,嗯,就把conda刪了,重新把所有軟件安裝一遍。不要問我為什麼那麼清楚,因為我也踩過坑。
目前有兩種創建conda環境的方法:
- 通過環境文件YAML來創建(
environment.yml
) - 通過命令來手動指定需要安裝的軟件包
通過環境文件來創建conda環境
首先看看一個 environment.yml
文件的例子:
name: bwa_old
channels:
-
- bioconda
dependencies:
-
- bwa=0.7.15
該文件主要由三部分組成:
- 該環境的名字
name:
- 你所指定的channel去安裝工具
channels
- 所需安裝的軟件包
現在我們開始構建我們的環境:
#下載好預先準備好的環境文件
wget https://raw.githubusercontent.com/davetang/reproducible_bioinformatics/master/environment.yml
#通過environment.yml文件構建環境
conda env create --file environment.yml
# 檢查當前conda所有的環境
conda env list
##可以看到當前的環境有兩個
# conda environments:
#
base
*
/opt/conda
bwa_old /opt/conda/envs/bwa_old
安裝好環境後,要怎麼使用呢?首先需要激活已經安裝好的環境:
conda activate bwa_old
# 你的terminal就會變成提示你你已經切換成(bwa_old)這個環境了
# (bwa_old) root@d470a3e9da91:/tmp#
### 查看一下bwa,看看是不是確實安裝好了
bwa
Program: bwa (alignment via Burrows-Wheeler transformation)
Version:
0.7.15-r1140
Contact:
Heng
Li
<[email protected]>
如果你運行完bwa後,想切回到之前的原始環境可以使用 conda deactivate
:
conda deactivate
# 回到之前的base了
# (base) root@d470a3e9da91:/tmp#
通過命令來手動指定需要安裝的軟件包
除了通過指定的環境文件來構建conda的環境之外,我們還可以通過手動指定需要安裝的軟件包來構建我們所需的環境。
下面看一個例子:
conda create -c conda-forge -n test_env python=2.7 numpy matplotlib pandas
這裡我就手動告訴conda,通過 -c
說明安裝的channel是conda-forge,通過 -n
告訴它我所創建的環境的名字,最後所需的安裝包跟在最後面 python=2.7numpy matplotlib pandas
。這樣conda就會自動幫你處理好不同軟件包之間的依賴項,完成安裝。
對於兩種安裝方式而言,第一種是我個人更喜歡的形式。為什麼呢?
與他人分享你的環境
通過 environment.yml
文件,我們可以輕鬆的將你分析所用的文件分享給別人。這一樣一來,能確保所用的軟件版本,分析的環境都是一致的。通過保存的不同的YML環境文件,我們可以清楚,方便的管理conda的每一個環境。
下面給大家一個例子,如果分享我們剛剛構建的 bwa_old
環境:
##激活`bwa_old`環境
conda activate bwa_old
### 輸出當前環境的文件配置
conda env export
-f test_env.yml
### 查看一下當前環境的文件配置
cat test_env.yml
name: bwa_old
channels:
-
- bioconda
-
- defaults
dependencies:
-
- _libgcc_mutex=0.1=main
-
- bwa=0.7.15=1
-
- libgcc=7.2.0=h69d50b8_2
-
- libgcc-ng=9.1.0=hdf63c60_0
-
- libstdcxx-ng=9.1.0=hdf63c60_0
-
- zlib=1.2.11=h7b6447c_3
prefix:
/opt/conda/envs/bwa_old
這時候,我們只要簡單的將 test_env.yml
發給我們的合作者,這樣他們就可以使用到和咱們一樣的環境啦。
關於conda的一些雜七雜八
主要的內容介紹得差不多了,下面簡單總結一下關於conda剩下的一些雜七雜八。
如何刪除一個環境:
conda env remove -n bwa_old
查看當前環境下所安裝的包:
conda list -n bwa_old
# packages in environment at /opt/conda/envs/bwa_old:
#
# Name Version Build Channel
_libgcc_mutex 0.1 main
bwa 0.7.15
1 bioconda
libgcc 7.2.0 h69d50b8_2
libgcc-ng 9.1.0 hdf63c60_0
libstdcxx-ng 9.1.0 hdf63c60_0
zlib 1.2.11 h7b6447c_3
指定你喜歡的安裝渠道,預先配置這些通道,以便每次創建環境時,都不需要指定下載的渠道:
conda config --add channels conda-forge
conda config --add channels bioconda
刪除不想要的conda包:
conda remove bcftools
關於conda的介紹就到這裡了,希望你有所收穫。關於conda的使用,還有很多的細節還沒完全介紹完,具體的大家可以到conda官方說明文件去查看。於此同時,你是否在conda使用時遇到過坑,歡迎在留言區留言,和大家分享你曾踩過的坑。
參考整理鏈接: https://davetang.github.io/reproducible_bioinformatics/conda.html
生信技能樹目前已經公開了三個生信知識庫,記得來關注哦~
每周文獻分享
https://www.yuque.com/biotrainee/weeklypaper
腫瘤外顯子分析指南
https://www.yuque.com/biotrainee/wes
生物統計從理論到實踐
https://www.yuque.com/biotrainee/biostat