2017年生信宝典发布了Linux学习 - 又双叒叕一个软件安装方式,现在按照使用经验做一些更新,主要是降低了conda环境的复制、导入和导入功能。最开始是为了培训时,学员更方便搭建流程引入的,现在分享下来,方便更多人使用。
Conda包管理系统
Conda是一种通用包管理系统,旨在建立和管理任何语言的任何类型的软件。通常与Anaconda (集成了更多软件包,#download)和Miniconda(只包含基本功能软件包, )一起分发。
最初接触到Anaconda是用于Python包的安装。Anaconda涵盖了100多个常用的Python包,一键式安装,解决Python包安装的苦闷。但后来发觉,其还有更多的功能,尤其是其降低了bioconda ()频道后,生物信息剖析的1500多个软件都可以一键安装了,免去了编译时间浪费和解决库文件安装的问题。对于时常编译软件的人,这一点还不够有吸引力。最吸引我的是它的工作环境概念,可以简单的配置不同Python版本的环境、不同Python包的环境、不同R环境和R包的环境,对于生物信息软件纷扰的应用和频繁的更新提供了很大的便利。
Conda安装和配置
在里面给出的链接下载Anaconda或Conda对应版本的分分包以后,安装就是运行下边的命令,根据提示一步步操作,主要是更改安装路径 (如果是根用户,可以安装到/anaconda下,其它任意目录都可以,但路径短还是有用处的;普通用户安装到自己有权限的目录下)
bash Miniconda2-latest-Linux-x86_64.sh
安装完成以后,记得把安装路径下的bin文件夹加入到环境变量中。环境变量的解释和使用见 和文章“PATH和path,傻傻分不清”
Conda基本使用
在Conda安装配置好以后,就可以使用了。
conda list # 列出安装的软件包
conda search # 搜索需要安装的软件包,获取其完成名字
以搜索numpy为例:
conda search numpy # * 表示对于版本的包已安装
Fetching package metadata ...............
numpy 1.7.2 py27_blas_openblas_201 conda-forge [blas_openblas]
1.7.2 py27_blas_openblas_202 conda-forge [blas_openblas]
1.12.0 py36_0 defaults
1.12.0 py36_nomkl_0 defaults [nomkl]
* 1.12.1 py27_0 defaults
1.12.1 py27_nomkl_0 defaults [nomkl]
1.13.1 py36_0 defaults
1.13.1 py36_nomkl_0 defaults [nomkl]
numpy-indexed 0.3.2 py27_0 conda-forge
1.0.47 py35_0 conda-forge
1.0.47 py36_0 conda-forge
numpy_groupies 0.9.6 py27_0 conda-forge
0.9.6 py35_0 conda-forge
0.9.6 py36_0 conda-forge
numpy_sugar 1.0.6 py27_0 conda-forge
1.0.6 py34_0 conda-forge
numpydoc 0.6.0 py27_0 conda-forge
0.6.0 py34_0 conda-forge
xnumpy 0.0.1 py27_0 conda-forge
安装包
conda install # 安装软件包
conda install numpy=1.7.2 # 安装特定版本的软件包
conda remove # 移除软件包
安装R
# 具体见下面
conda install -c r r-essentials # 安装R,及80多个常用的数据分析包, 包括idplyr, shiny, ggplot2, tidyr, caret 和 nnet
# 安装单个包
# conda install -c https://conda.binstar.org/bokeh ggplot
获取帮助信息
conda -h # 查看conda可用的命令
conda install -h #查看install子命令的帮助
只是那些命令就可以省去不少安装的麻烦了,但是假如软件没搜索到呢?
Conda的channel
Conda默认的源访问速率有些慢,可以降低国外的源 ();另外还可以降低几个源,以便于安装更多的软件,尤其是bioconda安装生信类工具。conda-forge通道是Conda社区维护的包含好多不在默认通道上面的通用型软件。r通道是向后兼容性通道,尤其是使用R3.3.1版本时会用到。后加的通道优先级更高,因此通常用下边列举的次序添加。
conda config --add channels conda-forge # Lowest priority
conda config --add channels defaults
conda config --add channels bioconda
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/ # 清华通道, 最高优先级
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/
conda config --set show_channel_urls yes
# 显示已有的通道
conda config --get channels
conda通道的配置文件通常在~/.condarc上面,内容如下。全局控制conda的安装在conda_path/.condarc,具体操作见。
channels:
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda/conda
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ # Anocanda清华镜像
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/msys2/
- bioconda
- defaults
- r
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/
- conda-forge
创建不同的软件运行环境
这是Conda最有特色的地方,可以通过创建不同的环境,同时运行不同软件的多个版本。
新创建的软件环境的目录为anaconda_path/envs/enrironment_name,具体见下边的3个事例。
使用官方的推荐命令安装时出了问题,py3.5的包装到了py2.7环境下。解决办法,新建一个py2.7的环境,然后安装。
# 新建一个环境,命名为phylo,指定其内安装的python版本为2.7
conda create -n phylo python=2.7
# 在phylo环境中安装 ete3
# ete3存在于2个通道中,官方推荐使用自己的通道,但没有成功
# -n 指定安装环境 -c 指定下载通道
# conda install -n phylo -c etetoolkit ete3 ete3_external_apps
# bioconda通道里面也有ete3, 下面的安装未指定具体通道,将在前面设定的几个通道里面按先后顺序查找安装
conda install -n phylo ete3 ete3_external_apps
# 默认安装到了anaconda_path下面的envs/phylo目录下(在屏幕输出也会有显示)
# 这个目录下存在bin文件夹,一般使用全路径就可以调用,如下
# anaconda_path/envs/phylo/bin/ete3 -h # 但有时会因为依赖关系而失败
# 所以激活本次安装环境是比较不容易出问题的使用方式
source activate phylo
# 在新环境里面执行命令操作
ete3 -h
# 其它操作
# 退出新环境
source deactivate phylo
# Create a new conda environment called r,并且在里面安装anaconda
conda create -n r anaconda
# Switch to r environment
source activate r
# 在新环境里面安装R Installs R
conda install -c r r
# Install R kernel for IPython notebook
conda install -c r r-irkernel
# Install ggplot
conda install -c https://conda.binstar.org/bokeh ggplot
# 最后退出新环境
source deactivate r
# 环境名字为 aligners
# 环境中安装 bwa bowtie hisat star
conda create -n aligners bwa bowtie hisat star
# 如果还想继续安装
conda install -n aligners hisat2
# 启动新环境
source activate aligners
star -h
source deactivate aligners
如果环境不需要了,或出了错,则可以移除。比如须要移除phylo环境,执行conda remove -n phylo --all。
有的时侯会出现装一个新包,装衣着着就把当前环境搞装崩了的情况,所以备份一个环境还是必要的,conda create -n python35copy --clone python35
做培训时须要给出席培训的老师提供配置环境的脚本,之前都是提供一个Bash文件,更简单的方法是可以导入环境,自己配置时再导出就好了。
# 假设我们有一个环境叫 ehbio,可以导出为一个yml文件
conda env export --file ehbio_env.yml --name ehbio
# 然后换一台电脑,就可以完全重现这个环境了
conda env create -f ehbio_env.yml
Conda配置R
在添加了不同的源以后,有些源更新快,有些更新慢,经常会遇到版本不一的问题。而且软件版本的优先级,低于源的优先级。保险期间,先做下搜索,获得合适的版本号,然后再选择安装。
conda search r-essentials
r-essentials 1.0 r3.2.1_0 r
1.0 r3.2.1_0a r
1.1 r3.2.1_0 r
1.1 r3.2.2_0 r
1.1 r3.2.1_0a r
1.1 r3.2.2_0a r
1.1 r3.2.2_1 r
1.1 r3.2.2_1a r
1.4 0 r
1.4.1 r3.3.1_0 r
1.4.2 0 r
1.4.2 r3.3.1_0 r
1.4.3 r3.3.1_0 r
1.5.0 0 r
1.5.1 0 r
1.5.2 r3.3.2_0 r
1.5.2 r3.4.1_0 r
1.6.0 r3.4.1_0 r
1.0 r3.2.1_0 defaults
1.0 r3.2.1_0a defaults
1.1 r3.2.1_0 defaults
1.1 r3.2.2_0 defaults
1.1 r3.2.1_0a defaults
1.1 r3.2.2_0a defaults
1.1 r3.2.2_1 defaults
1.1 r3.2.2_1a defaults
1.4 0 defaults
1.4.1 r3.3.1_0 defaults
1.4.2 0 defaults
1.4.2 r3.3.1_0 defaults
1.4.3 r3.3.1_0 defaults
1.5.0 0 defaults
1.5.1 0 defaults
1.5.2 r3.3.2_0 defaults
1.5.2 r3.4.1_0 defaults
1.6.0 r3.4.1_0 defaults
1.5.2 r3.3.2_0 conda-forge
1.5.2 r3.3.2_0 https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge
从里面可以看见北大的源版本同步于conda-forge, 都比较老,还是指定r通道安装。
conda install -c r -n r r-essentials=1.6.0
R会安装于conda_path/envs/r/bin中,软链到坐落环境变量的目录中即可正常使用。
Conda环境简化运行
为了便捷不同环境上面程序的运行,我写了一个shell脚本 (conda_env_run.sh),具体运行如下:
# -c: 表示实际需要运行的命令
# -e: 表示需要启动的软件环境,也就是上面conda create建立的环境
# -b:一般不需要指定,如果conda没在环境变量中需要给出conda的安装路径
conda_env_run.sh -c 'ete3 -h mod' -e phylo
conda_env_run.sh -c 'bwa mem -h' -e aligner -b "/usr/local/anaconda2/bin"
conda_env_run.sh内容如下
#!/bin/bash#set -xusage()
{
cat < parameter.${txtbld}OPTIONS${txtrst}:
-c Full command to be run ${bldred}[NECESSARY]${txtrst}
-e Environment name${bldred}[NECESSARY]${txtrst}
-b Conda path${bldred}[NECESSARY]${txtrst}EOF
}
command_cmd=''environment=''conda_path=''while getopts "hc:e:b:" OPTIONdo
case $OPTION in
h) echo "Help mesage"
usage exit 1
;;
c)
command_cmd=$OPTARG
;;
e)
environment=$OPTARG
;;
b)
conda_path=$OPTARG
;;
?)
usage echo "Unknown parameters"
exit 1
;; esacdoneif [ -z ${environment} ]; then
echo 1>&2 "Please give command and environment."
usage exit 1fiif ! [ -z ${conda_path} ]; then
export PATH=${conda_path}:${PATH}fisource activate ${environment}${command_cmd}source deactivate ${environment}
Reference