conda的安装与使用(2019-6-28更新)
2019-6-28 update: 增加删除、重命名conda环境的操作
2019-6-17 update: 普大喜奔!清华恢复了conda的镜像!清华🐮🍺!附上最新的添加清华镜像的命令!
2019-6-12 update: 发现了一个新的anaconda repo叫genomedk,添加了hoptop的搭建本地conda镜像的教程
2019-5-16 update: 有的小伙伴不知道怎么添加官方源,这边补充一下
2019-5-7 update: 万万没想到,腾讯的镜像比清华的先挂了……
2019-4-29 update: 更新了新的查找软件的recipe,更新了腾讯源来取代即将挂掉的清华源
有很多的生信软件都可以通过conda安装,省去了很多的安装、修bug的烦恼。经常是安装到崩溃的软件,conda一行命令就搞定了。前两天有个胖友问我gatk 3.8的版本在哪里下,下载好了之后怎么安装,我果断打开了https://bioconda.github.io/recipes ,告诉她安装conda吧,只要一行命令
conda install gatk
就行了。(2019-4-29 update:这个网址已经挂掉了,请改用https://anaconda.org/bioconda/repo)
然后她很可爱的问我conda怎么装。。果断就把这篇教程丢给她了,但是发现现在的用法和以前的不是很一样了,所以就把原来的教程更新了一下以飨读者。

conda简介
Conda 是一个开源的软件包管理系统和环境管理系统,用于安装多个版本的软件包及其依赖关系,并在它们之间轻松切换。 Conda 是为 Python 程序创建的,适用于 Linux,OS X 和Windows,也可以打包和分发其他软件。
安装conda
conda分为anaconda和miniconda。anaconda是包含一些常用包的版本(这里的常用不代表你常用 微笑.jpg),miniconda则是精简版,需要啥装啥,所以推荐使用miniconda。
下载网址
conda官网:https://conda.io/miniconda.html
选择适合自己的版本,用wget命令下载。
wget -c https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh
这里选择的是latest-Linux
版本,所以下载的程序会随着python的版本更新而更新(现在下载的版本默认的python版本已经是3.7了)
安装命令:
chmod 777 Miniconda3-latest-Linux-x86_64.sh #给执行权限
bash Miniconda3-latest-Linux-x86_64.sh #运行
注意,以前的教程都是教一路yes下来的,但是会有隐患,特别是当你的服务器之前有安装过软件的话,conda会污染你原来的环境,把你原来设置好的东西进行更改。具体的惨痛教训请参见:
Anaconda is a snake.
所以在询问是否将conda加入环境变量的时候选择no。

启动conda
在上一步选择no之后,输入conda是会报找不到此命令的。那要如何启动呢?
找到你刚才安装的miniconda,如果没有更改过安装位置的话应该是在/home
下面,cd
到miniconda3的bin目录下面,能看到有一个activate。

这里需要给activate
添加一下权限才能使用
chmod 777 activate
接下来启动conda
. ./activate #这里的第一个点跟source是一样的效果,我比较懒。

当命令行前面出现(base)
的时候说明现在已经在conda的环境中了。这时候输入conda list
命令就有反应了

添加频道
2019-5-16 update: 这个道理跟家里的电视机是一样一样的,安装conda就相当于买了一台电视机,但是有电视了不意味着你就能看节目了,你要手动添加频道才能看你想看的电视节目。
官方channel:
conda config --add channels bioconda conda config --add channels conda-forge
官方的话这两个channel应该就够了的。2019-6-12 update:最近在装raxml-ng的时候发现了一个新的channel叫genomedk,各位也可以添加到condarc里去 👇
conda config --add channels genomedk
顺便安利一个我hoptop学长的教程:如何搭建一个本地的conda镜像(包含bioconda)供各位爱折腾的高端玩家。2019-6-17 update: 清华恢复了conda 的镜像了!详情请看下面:
Anaconda 镜像即将恢复
借花献佛给大家复习一遍如何添加清华的镜像channels: 来源 → 生信媛: 喜大普奔: Anaconda的清华镜像又可以用了
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/bioconda/
2019-4-29 update: 由于anaconda授权问题,清华源即将关闭,请各位胖友添加以下腾讯源:
腾讯源已经挂掉了
conda config --add channels https://mirrors.cloud.tencent.com/anaconda/pkgs/free/ conda config --add channels https://mirrors.cloud.tencent.com/anaconda/cloud/bioconda/ conda config --add channels https://mirrors.cloud.tencent.com/anaconda/cloud/msys2/ conda config --add channels https://mirrors.cloud.tencent.com/anaconda/cloud/menpo/ conda config --add channels https://mirrors.cloud.tencent.com/anaconda/cloud/peterjc123/ conda config --add channels https://mirrors.cloud.tencent.com/anaconda/pkgs/main/ conda config --add channels https://mirrors.cloud.tencent.com/anaconda/cloud/conda-forge/ conda config --add channels https://mirrors.cloud.tencent.com/anaconda/cloud/pytorch/
万万没想到,腾讯的镜像比清华的先挂了……
感谢简书用户多啦A梦的时光机_648d
接下来啥镜像能用我也不知道了……大家都试试吧,或者坐等新的镜像发布。清华的近一个月应该是还能用的,我今天还测试过的。祝大家好运
显示安装的频道
conda config --set show_channel_urls yes
查看已经添加的channels
conda config --get channels
已添加的channel在哪里查看
vim ~/.condarc
利用conda安装生物信息软件
安装命令:
conda install gatk
搜索需要的安装包:
提供一个网址,用于事先查找想安装的软件存不存在
conda available packages
当然, 也可以用这个命令进行搜索
conda search gatk
安装完成后,可以用“which 软件名”来查看该软件安装的位置:
which gatk
如需要安装特定的版本:
conda install 软件名=版本号
conda install gatk=3.7
这时conda会先卸载已安装版本,然后重新安装指定版本。
查看已安装软件:
conda list
更新指定软件:
conda update gatk
卸载指定软件:
conda remove gatk
退出conda环境
退出也很简单,之前我们是. ./activate 或者 (. ~/miniconda3/bin/activate)
现在退出只要:
. ./deactivate
就退出当前的环境了
创建软件的软链接
跟着命令一路敲到这里的小旁友们估计发现了,现在退出conda环境之后之前安装的软件全都GG了,敲命令没法执行了!
怎么办呢!其实只要把安装好的软件软连接到一个处在环境变量里的位置就可以使用了。三步走:
- 第一步,创建一个文件夹
我一般的习惯是在/home
目录下创建一个.soft
文件夹 - 第二步,将这个文件夹添加到环境变量中
export PATH="~/.soft:$PATH"
- 第三步,软链接
ln -s ~/miniconda3/bin/gatk ~/.soft
这样就可以运行啦~如果还是不行建议试试初始化一下bashrc:. ./bashrc
创建conda环境
之前创建的时候显示的是(base)这是conda的基本环境,有些软件依赖的是python2的版本,当你还是使用你的base的时候你的base里的python会被自动降级,有可能会引发别的软件的报错,所以,可以给一些特别的软件一些特别的关照,比如创建一个单独的环境。
在conda环境下,输入conda env list
(或者输入conda info --envs
也是一样滴)查看当前存在的环境:

目前只有一个base
conda create -n python2 python=2
#-n: 设置新的环境的名字
#python=2 指定新环境的python的版本
conda会创建一个新的python2的环境,并且会很温馨的提示你只要输入conda activate python2就可以启动这个环境了

退出环境
如上面的截图提到的,只要
conda deactivate
2019-6-28 update: 如何删除和重命名一个已存在的环境
删除环境
删除也很容易的
conda remove -n myenv --all
就可以退出当前环境。
掌握了创建和删除我们就可以实现重命名的操作了
重命名环境
实际上conda并没有提供这样的功能,但是可以曲线救国,原理是先克隆一个原来的环境,命名成想要的名字,再把原来的环境删掉即可
参考自:conda 创建/删除/重命名 环境
接下来演示把一个原来叫做py2的环境重新命名成python2:
conda create -n python2 --clone py2
conda remove -n py2 --all
骚操作:allias简化启动

linux提供了一个给大家偷懒的命令叫alias,只要在你的.bashrc
里设置一下就好了,我添加了一条叫做condaup
的命令,这样就可以免去每次敲. ~/miniconda/bin/dactivate
的麻烦,一步搞定~技术宅改变世界!

参考及感谢
我以前的教程都不改环境变量
我的软件通常是这样安装的:
## https://github.com/najoshi/sickle
cd ~/biosoft
mkdir sickle && cd sickle
wget https://codeload.github.com/najoshi/sickle/zip/master -O sickle.zip
unzip sickle.zip
cd sickle-master
make
~/biosoft/sickle/sickle-master/sickle -h
## Download and install sratoolkit
## http://www.ncbi.nlm.nih.gov/Traces/sra/sra.cgi?view=software
## http://www.ncbi.nlm.nih.gov/books/NBK158900/
mkdir -p ~/biosoft
cd ~/biosoft
mkdir sratoolkit && cd sratoolkit
wget https://ftp-trace.ncbi.nlm.nih.gov/sra/sdk/current/sratoolkit.current-centos_linux64.tar.gz
tar zxvf sratoolkit.current-centos_linux64.tar.gz
~/biosoft/sratoolkit/sratoolkit.2.8.2-1-centos_linux64/bin/fastdump -h
cd ~/biosoft
mkdir SnpEff && cd SnpEff
## http://snpeff.sourceforge.net/
## http://snpeff.sourceforge.net/SnpSift.html
## http://snpeff.sourceforge.net/SnpEff_manual.html
wget http://sourceforge.net/projects/snpeff/files/snpEff_latest_core.zip
## java -jar snpEff.jar download GRCh37.75
## java -Xmx4G -jar snpEff.jar -i vcf -o vcf GRCh37.75 example.vcf > example_snpeff.vcf
unzip snpEff_latest_core.zip
这样我能完美的控制服务器里面的软件,反正都是在 ~/biosoft
目录
如果是常用软件需要添加环境变量
或者某些库文件需要添加到环境变量,我会:
mkdir -p ~/biosoft/myBin
echo 'export PATH=/home/jianmingzeng/biosoft/myBin/bin:$PATH' >>~/.bashrc
source ~/.bashrc
cd ~/biosoft
mkdir cmake && cd cmake
wget http://cmake.org/files/v3.3/cmake-3.3.2.tar.gz
tar xvfz cmake-3.3.2.tar.gz
cd cmake-3.3.2
./configure --prefix=/home/jianmingzeng/biosoft/myBin
make
make install
cd ~/biosoft
mkdir zlib && cd zlib
wget https://zlib.net/zlib-1.2.11.tar.gz
# Extracting files from the downloaded package:
tar -xvzf zlib-1.2.11.tar.gz
# Now, enter the directory where the package is extracted.
cd zlib-1.2.11
# Configuring zlib Library:
./configure --prefix=/home/jianmingzeng/biosoft/myBin
make
make install
这样会比较方便写教程
mkdir -p ~/biosoft/GATK/
cd ~/biosoft/GATK/
wget https://github.com/broadinstitute/gatk/releases/download/4.0.2.1/gatk-4.0.2.1.zip
unzip gatk-4.0.2.1.zip
~/biosoft/GATK/gatk-4.0.2.1/gatk --help
# for i in {1..22} X Y ;do echo "-I final_chr$i.vcf" '\';done
module load java/1.8.0_91
GATK=/home/jianmingzeng/biosoft/GATK/gatk-4.0.3.0/gatk
$GATK GatherVcfs \
-I final_chr1.vcf \
-O merge.vcf
而且读者也很容易理解,我是在使用哪个软件,是哪个版本。
但是最近为了图省事用了conda
conda这个东西,非常多人给我推荐过,即使是像我这样安装过上千款生物信息学软件的高手有时候也很痛苦各个软件的依赖关系,如果有省事的,我也比较乐意迁移我的习惯,但是,悲剧来了。
它在安装软件的时候需要C库就自己安装,需要R包就自己按照R,需要perl就自己安装,而且我把conda的默认路径添加到环境变量最新,最高权限,就把我默认的perl,r全部替换了。
比如下面的软件会报错:
BEGIN failed--compilation aborted at /home/jianmingzeng/biosoft/starFusion/STAR-Fusion/STAR-Fusion line 12.
Can't locate Set/IntervalTree.pm in @INC (you may need to install the Set::IntervalTree module) (@INC contains: /home/jianmingzeng/biosoft/starFusion/STAR-Fusion/PerlLib /home/jianmingzeng/miniconda2/lib/site_perl/5.26.0/x86_64-linux-thread-multi /home/jianmingzeng/miniconda2/lib/site_perl/5.26.0 /home/jianmingzeng/miniconda2/lib/5.26.0/x86_64-linux-thread-multi /home/jianmingzeng/miniconda2/lib/5.26.0 .) at /home/jianmingzeng/biosoft/starFusion/STAR-Fusion/STAR-Fusion line 12.
瞬间就明白问题所在,conda的某些过程,把我的环境变量污染了,我以前配置好的perl就这样被毁了,所以以前没问题的流程现在就开始报错了。
随口在生信技能树的VIP群里抱怨了一下,然后就有了今天这个教程!
conda请最好是通过source启动,一定要用conda安装不同功能的软件各个env,免得它污染环境变量,使用某些软件,就激活某些env。
leotao的建议
-
不要让conda在安装时,把path加到系统里去,要用的时候激活
-
激活后,用conda install -p /path/for/biotools/把 生信软件装到特定位置,而且这个位置的python版本最好和系统的一样
-
把这个 /path/for/biotools/ 加入到系统path
-
可能这样做后,反激活conda后生信软件也能用,同时不会污染环境
另外附上一篇还未公布的笔记:
conda安装的R语言初次使用会报错
我个人是很反对使用conda来安装R语言,但是很多时候conda安装的软件会依赖R,而conda比较实诚,一定要自己安装自己的R,而不是使用系统环境的。
所以就很尴尬。
通常conda本身就在我们的环境变量里面,而且优先级很高。那么conda一旦选择安装了自己的R,就会替代我们的R。
就会冲突,报错如下:
/home/jianmingzeng/miniconda2/lib/R/bin/exec/R: error while loading shared libraries: libicuuc.so.56: cannot open shared object file: No such file or directory
简单搜索,发现的确没有这个库文件:
find ~/miniconda2/ -name *libicuuc.so*
/home/jianmingzeng/miniconda2/pkgs/icu-58.2-h9c2bf20_1/lib/libicuuc.so.58.2
/home/jianmingzeng/miniconda2/pkgs/icu-58.2-h9c2bf20_1/lib/libicuuc.so.58
/home/jianmingzeng/miniconda2/pkgs/icu-58.2-h9c2bf20_1/lib/libicuuc.so
/home/jianmingzeng/miniconda2/lib/libicuuc.so
/home/jianmingzeng/miniconda2/lib/libicuuc.so.58
/home/jianmingzeng/miniconda2/lib/libicuuc.so.58.2
实际上我在我的另外一个服务器上面同样的查找,也是没有这个文件,但是却并不报错。
/usr/local/bin/miniconda3/pkgs/icu-58.2-0/lib/libicuuc.so
/usr/local/bin/miniconda3/pkgs/icu-58.2-0/lib/libicuuc.so.58.2
/usr/local/bin/miniconda3/pkgs/icu-58.2-0/lib/libicuuc.so.58
/usr/local/bin/miniconda3/pkgs/icu-54.1-0/lib/libicuuc.so.54
/usr/local/bin/miniconda3/pkgs/icu-54.1-0/lib/libicuuc.so
/usr/local/bin/miniconda3/pkgs/icu-54.1-0/lib/libicuuc.so.54.1
/usr/local/bin/miniconda3/pkgs/icu-58.2-h9c2bf20_1/lib/libicuuc.so
/usr/local/bin/miniconda3/pkgs/icu-58.2-h9c2bf20_1/lib/libicuuc.so.58.2
/usr/local/bin/miniconda3/pkgs/icu-58.2-h9c2bf20_1/lib/libicuuc.so.58
/usr/local/bin/miniconda3/envs/py2.7/lib/libicuuc.so.54
/usr/local/bin/miniconda3/envs/py2.7/lib/libicuuc.so
/usr/local/bin/miniconda3/envs/py2.7/lib/libicuuc.so.54.1
/usr/local/bin/miniconda3/lib/libicuuc.so
/usr/local/bin/miniconda3/lib/libicuuc.so.58.2
/usr/local/bin/miniconda3/lib/libicuuc.so.58
可以看到这个库文件是conda安装了icu后获得的,那么我应该是要安装特定版本的icu才行。
conda install -c conda-forge icu=56.1
ICU(International Component for Unicode/Unicode国际化组件) 是 Unicode 支持、软件国际化、全球化的一个成熟的、广泛应用的库,是一个由 IBM 赞助、支持和使用的,基于"IBM公共许可证",用于支持软件国际化的开源项目。这个库为 C 和 Java 编程语言提供了一整套操作 Unicode 数据的函数。这个库是在一种无限制的开放源码许可证下发布的,这使它可以在许多应用程序中使用。
问题是解决了,可是我首先不明白问题是如何产生的,其次也不明白,问题被解决的原理是什么。纯粹是凭感觉,凭经验。
之所以两个系统表现不一样,可能是linux版本不一致。
https://github.com/conda/conda/issues/3600