可重复的生信分析一直是未来的趋势。如果实现可重复的生信分析,关键在于分析软件版本的控制,一致的环境设置还有良好的分析流程的记录。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:
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 <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.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
---来自腾讯云社区的---生信菜鸟团
微信扫一扫打赏
支付宝扫一扫打赏