分享

终极奥义! 生信软件安装神器~ conda 从入门到精通

 生信药丸 2021-09-02


前言


生物信息学分析常常需要用到许多不同的软件,常见安装方式有三种:

  1. 源码安装,要求安装者对包有较充分的认识,适用于开发者或深入学习和挑战者;

  2. 预编译版本安装,一般安装者将其拷贝到目录下即可运行;

  3. 第三方安装管理软件,如conda、Bioconductord等包管理软件和docker、singularity等镜像管理软件。

但是三种方式各有长处:

  1. 预编译版本最简单,但许多包并不提供这种版本。

  2. 绝大多数包都提供源码,但源码的依赖环境对于小白太过不友好(初期少不了砸键盘)。

  3. 第三方管理包帮你解决了环境依赖,

     ● 一些简单的了解和操作即可上手,通常来说是小白的首选,

     ● 但它上限绝不仅于此,像dockersingularity等可以跨平台,一次搭建幸福一生!


目录

1. conda的安装

  1.1 下载

  1.2 安装

2. conda环境认识

  2.1 目录结构

  2.2 进入base环境

3. conda管理包

  3.1 安装包

  3.2 卸载包

4. 环境管理

  4.1 创建环境

  4.2 在指定环境中安装、删除包

  4.3 不同环境切换

  4.4 删除环境

  4.5 退出环境

5. conda安装源的问题

  5.1 默认源无包

  5.2 包在哪个源有

  5.3 指定源安装

6 conda配置文件

  6.1 源的配置

    6.1.1 将源写入配置文件

    6.1.2 源的读取顺序

    6.1.3 源的数量

  6.2 其他信息的配置

7. 环境拷贝(clone)

  7.1 输出配置信息

  7.2 依据文本配置信息重新安装

01


conda的安装

常见的conda有两个类型,分别为minicondaAnaconda,前者是后者的轻量版本,

两者可安装的包是一致的,本文以miniconda安装为例。

1.1 下载

找到miniconda的下载页面,下载Linux版本,

##下载链接wget https://repo./miniconda/Miniconda3-py39_4.9.2-Linux-x86_64.sh

1.2 安装

上述下载的链接文件为安装condabash脚本文件,接下来执行命令,按操作提示

bash Miniconda3-py39_4.9.2-Linux-x86_64.sh

确认是否是想要安装的conda以及python版本,确认无误,直接Enter键进入下一步

回答1,确定版本信息,直接Enter进入安装

此回答前有一些条款,这里选择yes,后Enter键进入下一步

回答2,同意条约,选择yes

重要:此步骤询问安装路径,默认当前路径,版主当前是在/mnt/home/*/目录下(*表示作者名),执行的bash Miniconda3-py39_4.9.2-Linux-x86_64.sh命令,

  1. Enter键选择当前路径进行安装,

  2. 如果当前不是目标路径,可在 >>> 处直接输入目标路径,然后Enter键进入安装,

回答3,安装路径,默认在当前目录

重要:版主选择no,并Enter进入下一步,

  1. 该步骤会执行conda init命令,将conda命令写入环境变量文件 .bashrc或.bash_profile 中,此后的每次进入bash都会进入conda基础环境

  2. 版主喜欢静静的被支持,不要过多的打扰(PS:也是许多设计追求的体验之一)。

回答4,是否写入环境变量文件,选择否

至此,miniconda安装完毕,安装后,目录下多了个miniconda3的文件夹,

多了个miniconda3的文件夹

02


conda环境认识

当安装完成后,你跃跃欲试,发现输入conda,被提示该命令不存在。

  1. 如果在1.2中的回答4中选择了yes,则不存在当前问题(虽然conda环境方便了,但是容易污染其他非conda的环境),

  2. 解决当前的问题就是了解miniconda3文件夹的构成。

conda命令不存在

2.1 目录结构

conda的目录结构,描述几个和使用较相关的目录,

  1. /bin/文件夹,内含base环境的命令,如管理命令conda, activate等,

  2. /envs/文件夹,除base环境外的其他环境,在安装最初为空目录,可由conda create创建,

    ● 该目录下的每个子目录为一个环境,具有和base类似的目录结构,如/bin/目录

  3. /lib/文件夹,存放base环境的动态库,

  4. /pkgs/文件夹,存在base环境的包。

miniconda3目录的子目录

2.2 进入base环境

版主喜欢使用时再进入环境,环境存在~/miniconda3/bin/activate文件中,

##进入base环境source ~/miniconda3/bin/activate

成功进入base环境的标识

现在输入conda有反应啦,出现以下提示,

03


conda管理包

3.1 安装包

安装一个scipy包试试,

conda install scipy

出现提示1,

出现提示2,

出现以下结果,即表示安装成功,可使用conda list对比前后查看该包是否安装了。

3.2 卸载包

##移除scipy包conda remove scipy

04


环境管理

多个不同的软件可能要求不同版本的依赖包和程序,如果都在base目录下进行,则每次都需要安装包和环境,

    与之相对应的是conda的可以管理多个独立的环境

4.1 创建环境

conda安装初始时,只含有base一个环境,

##查看已有环境conda info --envs

创建新的环境,通过指定--name-n参数,

  1. 比如默认的conda安装使用的是python3.9,而我的某些脚本只能在python2.x下运行,于是我可以创建一个新py2环境

  2. 新创建的环境在/envs/目录下,名称为--name指定的字符

##创建一个环境conda create --name py2

新创建的环境将位于envs目录下

也可以通过conda info --envs来查看新的环境,

4.2 在指定环境中安装、删除包

安装包到指定环境,通过指定--name-n参数,

##安装python2.7到py2环境conda install -n py2 python=2.7##在该环境中安装numpy包conda install -n py2 numpy

也可以将创建环境和安装包结合到一条命令中。

conda create -n py2 python=2.7


更新指定环境包,额外指定--name-n参数,

#更新包conda update -n py2 numpy#删除包conda remove -n py2 numpy

4.3 不同环境切换

在py2环境中安装了python2后,并不能在当前环境中获得python2,使用which查看python命令,发现

  1. 无论python还是python3命令均指向base环境中的python

  2. pyhton2指向服务器**/usr/目录,也不是我们的py2**环境的目录(其目录见本文4.1)

这时需要在不同环境中切换,使用conda activate py2,激活py2环境,

  • 该命令的使用前提是,当前环境conda命令能够找得到,比如我们当前是在base环境中,能够使用conda命令,

执行命令后,切换到py2环境(见标识),

  • 无论python还是python2命令均指向py2环境中的python

  • pyhton3无指向,因为当前已不在base环境中

命令总结,

##激活py2conda activate py2##激活baseconda activate baseconda activate

4.4 删除环境

想要删除某环境,例如意外输入创建了py4环境

##创建的环境名不符合预期conda create -n py4 python=2.7##将环境和其下的包删除conda remove -n py4 --all

4.5 退出环境

程序运行完,需要退出conda环境,退出顺序 py2 --> base --> bash

  • 当前在py2环境,执行命令后退到base环境,再次执行命令完全退出了conda环境,到了bash环境

##退出当前环境conda deactivate

05


conda安装源的问题

为什么要关注源的问题?

  1. 最简单回答:源错了,包安装不了,或安装的包版本不对,或不适用某软件。

  2. 不同渠道的包存在相互覆盖,优先级等情况,我们来举个栗子。

5.1 默认源无包

admixture软件是群体混合分析常用的工具之一,可使用conda安装,但怎么我安装不了?

  • 安装出现报错,翻译成人话“在你的这四个源中找不到admixture软件包”。

##创建一个admixture环境安装该包conda create -n admixture admixture

5.2 包在哪个源有

到Anaconda官网查询,输入admixture检索,

输入admixture进行检索

出现两条记录,第一条记录说明,该软件用于评估个体的祖先程度,对,这个就是梦中包,在bioconda源中,

  • 点击admixture绿色文字进入查看详情

有两条记录,第一条就是目标

详细信息如版本号,发布的年份,包括安装方式,可以直接复制代码全装

5.3 指定源安装

使用**-c或--channel**指定包的安装源,发现其能够找到该包,

##创建admixture环境并从bioconda安装admixture软件conda create -n admixture -c bioconda admixture

能够找到admixture包,选择y进入安装

06


conda配置文件

6.1 源的配置

将源写入配置文件,避免每次指定**-c**参数,也省去寻找源的繁琐步骤,

  1. conda的配置文件以隐藏文件形式存在,其路径 /mnt/home/author/.condarc

  2. 将源写入配置文件,可以通过命令,和手动编辑**.condarc**文件等方式

conda的配置文件

显示文件为空

##查看当前源conda config --show-sources

当前源也为空

6.1.1 将源写入配置文件

bioconda写入配置文件,

  • 可以看到**.condarc出现bioconda和defaults**两个渠道

##添加biocondaconda config --add channels bioconda


继续添加源conda-forger

conda config --add channels conda-forgeconda config --add channels r

6.1.2 源的读取顺序

上面一顿操作后,已经拥有下图中的四个源,当存在多个源时,搜索就有一定的顺序:

  1. conda将依次从上往下在该源中去寻找包,如果找到了则停止搜索,如果没找到,更换源继续搜索,

  2. 当在命令安装时使用**-c参数指定时,该指定源**搜索的优先级最高。

  3. 所以一般,在配置文件中拟定一个顺序。个人喜欢bioconda > conda-forge > r > defaults

6.1.3 源的数量

百度搜索后发现有很多源,可编辑文件vim ~/.condarc进行添加,但是源不是数量越多越好

  • 虽然多能保证包被搜索到可能性更高,但同样搜索一个包的时间更长,

  • 某些源某时间段可能存在访问问题,当在问题源上搜索时会浪费大量的时间,有时几分钟也搜索不出结果。

  • 包存在依赖时,多个不同源的依赖包偶尔会存在冲突(版本不匹配),这种情况下卸载再安装依然会重复上述问题。

  • 因此将不同源的分别存到文件,如.condarc_bak_tsinghua, .condarc_bak_sjtu等,需要时将其改名为为**.condarc**文件即可,

可按以下方式使用某个源,先备份常用,再使用其他源。结束后可将文件名改回。

##保存常用的源配置mv ~/.condarc ~/.condarc_bak##使用清华源mv ~/.condarc_bak_tsinghua ~/.condarc

清华源

channels: - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/ - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ - https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/ - https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/

上海交通大学源

channels: - https://mirrors.sjtug.sjtu.edu.cn/anaconda/pkgs/main/ - https://mirrors.sjtug.sjtu.edu.cn/anaconda/pkgs/free/ - https://mirrors.sjtug.sjtu.edu.cn/anaconda/cloud/conda-forge/

6.2 其他信息的配置

这部分在平时较少使用,笔者也关注,在此略过。

07


环境拷贝(clone)

当你辛苦构建了一个环境,里面拥有几十上百个软件,如果更换服务器需要重新安装,又得花费大量时间。

  • conda提供将当前环境的版本和依赖信息输出到文件,重新安装时直接读取该文件。

7.1 输出配置信息

admixture环境配置文件信息输出,

  • 输出信息包括环境名称、源配置、包以及路径等

##输出环境信息到文本conda env export -n admixture > environment.yml

admixture环境输出的信息

braker2的环境输出信息

7.2 依据文本配置信息重新安装

##依照文本信息重新打造一个环境conda env create -f environment.yml##也可给环境重新命名conda env create -n admixture_copy -f environment.yml

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多