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

2020-03-30 14:31:20 浏览数 (1)

可重复的生信分析一直是未来的趋势。如果实现可重复的生信分析,关键在于分析软件版本的控制,一致的环境设置还有良好的分析流程的记录。Conda可以说是版本控制和生信工具安装的一大神器。相信大家对它了解肯定不少,但是又该怎么样利用它,进行可重复的分析呢?今天继续讲第二部分 Conda的介绍

本节教程将会使用到docker,去安装minconda的镜像。如果你还没看我docker的教程,强烈建议你先回顾一下:

可重复的生信分析系列一: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:

  1. docker pull continuumio/miniconda3

使用docker,运行新的conda container:

  1. # run new container
  2. docker run -it --rm continuumio/miniconda bash

运行上面的命令后,可以看到类似于这样的terminal:

  1. (base) root@c94ca01d4fdb:/#

像其它工具一样,直接输入conda并且不带任何参数,就可以得到其帮助文档:

  1. conda
  2. usage: conda [-h] [-V] command ...
  3. conda is a tool for managing and deploying applications, environments and packages.
  4. Options:
  5. positional arguments:
  6. command
  7. clean Remove unused packages and caches.
  8. config Modify configuration values in .condarc. This is modeled
  9. after the git config command. Writes to the user .condarc
  10. file (/root/.condarc) by default.
  11. create Create a new conda environment from a list of specified
  12. packages.
  13. help Displays a list of available conda commands and their help
  14. strings.
  15. info Display information about current conda install.
  16. init Initialize conda for shell interaction. [Experimental]
  17. install Installs a list of packages into a specified conda
  18. environment.
  19. list List linked packages in a conda environment.
  20. package Low-level conda package utility. (EXPERIMENTAL)
  21. remove Remove a list of packages from a specified conda environment.
  22. uninstall Alias for conda remove.
  23. run Run an executable in a conda environment. [Experimental]
  24. search Search for packages and display associated information. The
  25. input is a MatchSpec, a query language for conda packages.
  26. See examples below.
  27. update Updates conda packages to the latest compatible version.
  28. upgrade Alias for conda update.
  29. optional arguments:
  30. -h, --help Show this help message and exit.
  31. -V, --version Show the conda version number and exit.
  32. conda commands available from other packages:
  33. env

conda的版本

在安装工具前,先确保我们使用的conda版本是最新的:

  1. ### 查看当前版本
  2. conda --version
  3. conda 4.8.2
  4. ###进行升级,会弹出需要你输入y的确认信息
  5. conda update conda
  6. ###再次查看更新后的版本
  7. conda --version
  8. conda 4.8.3
  9. ###另外,你还可以将所有conda的包更新为最新兼容的版本(可选的)
  10. conda update --all

对于conda下载的缓存临时文件,可以定期通过 conda clean进行清理:

  1. conda clean -a

使用conda安装生物信息软件bcftools

在没有conda之前,我们需要 通过一系列的操作,才能完成安装:

相比之下,使用Bioconda的管道进行安装就容易得多了:

  1. ### 使用Bioconda的管道进行安装
  2. conda install -c bioconda bcftools
  3. ###下载测试文件
  4. cd /tmp
  5. wget https://github.com/davetang/learning_vcf_file/raw/master/aln_consensus.bcf
  6. # 查看前面两个的SNP信息
  7. bcftools view -v snps aln_consensus.bcf | grep -v "^#" | head -2
  8. 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
  9. 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文件的例子:

  1. name: bwa_old
  2. channels:
  3. - bioconda
  4. dependencies:
  5. - bwa=0.7.15

该文件主要由三部分组成:

  • 该环境的名字 name:
  • 你所指定的channel去安装工具 channels
  • 所需安装的软件包

现在我们开始构建我们的环境:

  1. #下载好预先准备好的环境文件
  2. wget https://raw.githubusercontent.com/davetang/reproducible_bioinformatics/master/environment.yml
  3. #通过environment.yml文件构建环境
  4. conda env create --file environment.yml
  5. # 检查当前conda所有的环境
  6. conda env list
  7. ##可以看到当前的环境有两个
  8. # conda environments:
  9. #
  10. base * /opt/conda
  11. bwa_old /opt/conda/envs/bwa_old

安装好环境后,要怎么使用呢?首先需要激活已经安装好的环境:

  1. conda activate bwa_old
  2. # 你的terminal就会变成提示你你已经切换成(bwa_old)这个环境了
  3. # (bwa_old) root@d470a3e9da91:/tmp#
  4. ### 查看一下bwa,看看是不是确实安装好了
  5. bwa
  6. Program: bwa (alignment via Burrows-Wheeler transformation)
  7. Version: 0.7.15-r1140
  8. Contact: Heng Li <lh3@sanger.ac.uk>

如果你运行完bwa后,想切回到之前的原始环境可以使用 conda deactivate:

  1. conda deactivate
  2. # 回到之前的base了
  3. # (base) root@d470a3e9da91:/tmp#

通过命令来手动指定需要安装的软件包

除了通过指定的环境文件来构建conda的环境之外,我们还可以通过手动指定需要安装的软件包来构建我们所需的环境。

下面看一个例子:

  1. 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环境:

  1. ##激活`bwa_old`环境
  2. conda activate bwa_old
  3. ### 输出当前环境的文件配置
  4. conda env export -f test_env.yml
  5. ### 查看一下当前环境的文件配置
  6. cat test_env.yml
  7. name: bwa_old
  8. channels:
  9. - bioconda
  10. - defaults
  11. dependencies:
  12. - _libgcc_mutex=0.1=main
  13. - bwa=0.7.15=1
  14. - libgcc=7.2.0=h69d50b8_2
  15. - libgcc-ng=9.1.0=hdf63c60_0
  16. - libstdcxx-ng=9.1.0=hdf63c60_0
  17. - zlib=1.2.11=h7b6447c_3
  18. prefix: /opt/conda/envs/bwa_old

这时候,我们只要简单的将 test_env.yml发给我们的合作者,这样他们就可以使用到和咱们一样的环境啦。

关于conda的一些杂七杂八

主要的内容介绍得差不多了,下面简单总结一下关于conda剩下的一些杂七杂八。

如何删除一个环境:

  1. conda env remove -n bwa_old

查看当前环境下所安装的包:

  1. conda list -n bwa_old
  2. # packages in environment at /opt/conda/envs/bwa_old:
  3. #
  4. # Name Version Build Channel
  5. _libgcc_mutex 0.1 main
  6. bwa 0.7.15 1 bioconda
  7. libgcc 7.2.0 h69d50b8_2
  8. libgcc-ng 9.1.0 hdf63c60_0
  9. libstdcxx-ng 9.1.0 hdf63c60_0
  10. zlib 1.2.11 h7b6447c_3

指定你喜欢的安装渠道,预先配置这些通道,以便每次创建环境时,都不需要指定下载的渠道:

  1. conda config --add channels conda-forge
  2. conda config --add channels bioconda

删除不想要的conda包:

  1. 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

0 人点赞