2.1 软件的安装与管理
安装生信软件是非常让人头疼的一件事。在我读PhD期间,它占据了我大约1/5的时间。这一讲,我将给大家介绍如何快速安装和管理自己的生信软件。
2.1.1 软件安装
生信学习中有很多的软件。大部分都需要安装附加软件(dependencies)。由于大家电脑或者服务器的设置不同,快速而有效的软件安装通常比较困难。下面我给大家介绍两个常用的工具:brew
和conda
(对于docker
这里我不在具体讲述,感兴趣的同学可以自行网上搜索教程)。
2.1.1.1 如何使用brew
brew
主要提供了两个版本,在Linux系统上它以linuxbrew
呈现,在MacOS系统上它以homebrew
呈现。这里我以linuxbrew
为例给大家展示如何使用brew
。
下载linuxbrew
$ git clone https://github.com/Linuxbrew/brew.git ~/.linuxbrew (## 可以根据自己的喜好更改安装路径,这里我选择的是$HOME)
在.bashrc
里设置linuxbrew
的路径 (根据自己的喜好适当调整路径设置)
PATH="$HOME/.linuxbrew/bin:$PATH"
export MANPATH="$(brew --prefix)/share/man:$MANPATH"
export INFOPATH="$(brew --prefix)/share/info:$INFOPATH"
对于不熟悉.bashrc
的同学,可以参考我的第一讲.
常用的brew
语句
$ brew search <software> ## 查找所需的软件
$ brew install/uninstall <software> ##安装/卸载所需的软件
$ brew link/unlink <software> ##对于特定版本的软件进行关联/解除关联
$ brew cleanup ## 清理缓存
2.1.2 如何使用conda
bioconda
中提供了很多生信使用的工具,依托anaconda
或者miniconda
,人们可以很方便的安装自己想要的工具。在安装自己喜欢的工具之前,同学们可以登录
https://bioconda.github.io/recipes.html
去查询自己所需的软件是否被bioconda
收录。
对于conda
的安装, 如果喜欢anaconda
(内置了很多软件,如果空间充足可以选择这个),同学们可以登录
https://www.anaconda.com/download
去下载自己所需的版本。
如果喜欢miniconda
(anaconda
的简化版),同学们可以登录
https://conda.io/miniconda.html
去下载自己喜欢的版本。
Note:anaconda/miniconda主要有两个不同的版本,一个是预先安装了python2,另一个是预先安装了python3。 请根据自己喜好自由选择。
设置conda
$ conda config --add channels defaults
$ conda config --add channels conda-forge
$ conda config --add channels bioconda
用conda
安装软件
$ conda install -m <the name of the package>
2.2 不同版本软件的管理
对于大部分的服务器,大家都喜欢用module
去管理软件。两种常用的管理系统是Modules
和Lmod
。Lmod
对于Modules
的设置是完全兼容的。反之则不那么友善。
- 如果大家的服务器上已经装了
module
,大家可以通过对自己.bashrc
的设置来实现对自己软件的管理:
$ export MODULEPATH=/full/path/to/your/modulefiles:$MODULEPATH
或者用:
$ module use /full/path/to/your/modulefiles
在这之前,大家需要建立一个modulefiles
folder
$ mkdir -p /path/to/your/modulefiles
下面我以samtools
为例给大家介绍如何设置module
。首先建立一个samtools
folder
$ mkdir -p /full/path/to/your/modulefiles/samtools
然后进入samtools
folder
$ cd /full/path/to/your/modulefiles/samtools
在该folder里建立一个文本,例如1.8
。 具体内容如下:
#%Module######################################################################
#
# samtools modulefile
#
proc ModulesHelp { } {
puts stderr "Sets up the paths you need to use samtools version 1.8"
}
set sys [uname sysname]
set version samtools ##设置工具的名字
set tool 1.8 ##设置版本号
if { [is-loaded $tool] && ! [is-loaded $tool/$version] } {
module unload $tool
}
module load htslib/1.8 ##这里可以load所需的附加软件
prepend-path PATH /Users/yyuan/Tools/samtools-1.8/bin ##设置软件的路径
prepend-path BAM_ROOT /Users/yyuan/Tools/samtools-1.8 ## 设置bam library
prepend-path LD_LIBRARY_PATH /Users/yyuan/Tools/samtools-1.8/lib ##设置library
prepend-path MANPATH /Users/yyuan/Tools/samtools-1.8/share/man ##设置manual
设置完成后大家可以进行如下操作
$ source ~/.bashrc ##这里也可以重新登录自己的服务器
$ module show samtools/1.8
去查看自己的设置是否成功。
- 如果自己的系统中没有安装
module
,那该怎么办呢?下面我给大家介绍如何安装Modules
(这里最好要有root权限)。
下载modules
$ wget http://downloads.sourceforge.net/project/modules/Modules/modules-4.2.1/modules-4.2.1.tar.gz
解压modules
$ tar -xvzf modules-4.2.1.tar.gz
安装modules
(这里需要root权限,如果没有root权限,可以修改设置,这里我不在讲解怎么修改)
$ cd modules-4.2.1
$ ./configure
$ make
$ make install
设置modulepath
$ vim /usr/local/Modules/init/modulerc (# modify "module use --append /full/path/to/your/modulefiles")
在.bashrc
中设置module
case "$0" in
-sh|sh|*/sh) modules_shell=sh ;;
-ksh|ksh|*/ksh) modules_shell=ksh ;;
-zsh|zsh|*/zsh) modules_shell=zsh ;;
-bash|bash|*/bash) modules_shell=bash ;;
esac
module() { eval `/usr/bin/tclsh /usr/local/Modules/libexec/modulecmd.tcl $modules_shell $*`; }
# ~/.bashrc: executed by bash(1) for non-login shells.
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
# for examples
# If not running interactively, don't do anything
case $- in
*i*) ;;
*) return;;
esac
source /usr/local/Modules/init/modulerc
source /usr/local/Modules/init/profile.sh
完成以上设置后,大家可以
$ source ~/.bashrc ##这里也可以重新登录自己的服务器
$ module -h
去查看自己的设置是否成功。
对于Lmod
的设置,稍许有些复杂,感兴趣的同学可以到:
https://sourceforge.net/projects/lmod/files
进行下载。
具有的安装步骤可以参考:
https://lmod.readthedocs.io/en/latest
Lmod
文件的设置不同于modules
, 通常它以.lua
为后缀。模板如下tmp.lua
:
help("Sets up the paths you need to use <software> version <version_info>")
local version = '<version_info>'
local tool = '<software>'
whatis( [[<description of the software>]] )
whatis( [[Compiled with gcc/xxxx]] )
conflict("xxxxx")
if (mode() == "load") then
if (isloaded("<dependency>") ~= true) then
load("<dependency/version>")
end
end
if (mode() ~= "whatis") then
prepend_path("PATH","/path/to/your/tool")
end
希望大家相互学习,多批评指正!
版权所有者 Andy. Twitter: @Yuxuan_Yuan; Wechat: yyx8671;微信公众号:生信人生