可重复的生信分析系列二:Conda的介绍

可重复的生信分析一直是未来的趋势。如果实现可重复的生信分析,关键在于分析软件版本的控制,一致的环境设置还有良好的分析流程的记录。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环境的方法:

  1. 通过环境文件YAML来创建(environment.yml)
  2. 通过命令来手动指定需要安装的软件包

通过环境文件来创建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 <lh3@sanger.ac.uk>

如果你运行完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.7 numpy 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使用时遇到过坑,欢迎在留言区留言,和大家分享你曾踩过的坑。

参考整理链接:
https://davetang.github.io/reproducible_bioinformatics/conda.html

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,029评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,395评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,570评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,535评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,650评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,850评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,006评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,747评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,207评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,536评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,683评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,342评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,964评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,772评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,004评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,401评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,566评论 2 349

推荐阅读更多精彩内容