第4章 Conda环境管理与软件安装

生物信息学最让人头疼的事,我猜就是装软件了。

你想想看,一个项目下来,BWA要某个版本,GATK要Java 8,Python脚本又要3.7,系统自带的Python可能是3.10。手动搞?我试过一两次,光解决依赖冲突就能耗掉半天。后来我彻底转向Conda,一个命令建一个独立环境,干干净净。

4.1 为什么选Conda?

Conda不是唯一的选择,但我个人觉得它最省心。尤其当你需要同时管理R、Python、C++编译的二进制工具时,Conda的包管理器能把它们都捏到一起。

特性Condapip + virtualenv手动编译
跨语言包支持(Python/R/C/Java)仅Python需要自己折腾
二进制分发预编译,即装即用需要编译工具链手动编译
环境隔离完整隔离隔离但依赖系统库全局安装
版本回退轻松麻烦重装

说白了,Conda就是给生物信息学量身定做的。我早期项目里用pip装htslib,结果系统缺zlib,排错排了两天……后来全换成Conda,五分钟搞定。

4.2 安装Miniconda

不建议装完整的Anaconda,太大。Miniconda就够用。

# Linux x86_64
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash Miniconda3-latest-Linux-x86_64.sh -b -p ~/miniconda3
~/miniconda3/bin/conda init

注意:-b 是无交互安装,-p 指定路径。安装完成后重新登录shell,或者 source ~/.bashrc。

小经验:我个人习惯把Conda装在/opt/conda或者/tools下,方便多用户共享。但如果你只有一个人用,放home目录最省事。

4.3 配置国内镜像源

不配镜像?下载速度会让你怀疑人生。我曾经等一个GATK安装包等了半小时,后来换成清华源,十几秒就完事。

conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/
conda config --set show_channel_urls yes

4.4 创建独立环境

每个项目一个环境,这是铁律。我见过太多人所有包塞在base里,升级一个包崩掉另一个,最后只能重装。

# 创建名为bwa_gatk的环境,指定Python 3.9
conda create -n bwa_gatk python=3.9

# 激活环境
conda activate bwa_gatk

# 退出环境
conda deactivate

4.5 安装BWA和GATK

BWA可以直接从conda-forge装。GATK有点特殊,它需要Java 8,且官方推荐用bioconda渠道。

conda activate bwa_gatk

# 安装BWA(版本0.7.17)
conda install -c bioconda bwa=0.7.17

# 安装GATK4(版本4.2.6.1)
conda install -c bioconda gatk4=4.2.6.1

# 验证安装
bwa 2>&1 | head -5
gatk --version

为什么指定版本? 我在生产环境吃过亏:默认装最新版,结果BWA新版改了索引格式,旧版bwakit不兼容,跑了一半报错。所以,锁定版本号是保命操作。

曾经踩过的坑:GATK4依赖Java 8,如果系统默认Java版本太高(比如Java 11),会报Unsupported major.minor version。我那时花了一小时排查,最后发现Conda其实会自动拉Java 8的依赖,但如果你在激活环境之前已经设了JAVA_HOME,环境变量会冲突。解决方案:在激活环境后重新设置JAVA_HOME指向Conda内的Java:
export JAVA_HOME=$(dirname $(dirname $(which java)))

4.6 环境清单与导出

项目交付或换机器时,环境复现是关键。我会把环境导出为YAML文件,放在项目根目录。

# 导出当前环境的所有包(含版本)
conda env export -n bwa_gatk > environment.yaml

# 从YAML重建一模一样的环境
conda env create -f environment.yaml

但要注意:conda env export会带上系统特定的依赖(比如linux-64的包),跨平台可能不兼容。我建议用--from-history参数,只记录你手动安装的包:

conda env export -n bwa_gatk --from-history > environment_minimal.yaml

这样别人在macOS或Windows上也能直接建环境。

4.7 常用管理命令速查

操作命令
列出所有环境conda env list
删除环境conda remove -n bwa_gatk --all
克隆环境conda create -n bwa_gatk_v2 --clone bwa_gatk
更新某个包conda update gatk4
搜索可用版本conda search bwa
清理缓存conda clean -a
# 快速清理,释放空间(Conda缓存经常占几个G)
conda clean -afy

4.8 环境结构可视化

下面这个图是我自己画的环境管理流程,每次带新人我都贴出来。

Conda 环境管理与软件安装流程 安装 Miniconda 配置镜像源 创建独立环境 安装 BWA (0.7.17) 安装 GATK4 (4.2.6.1) 导出 YAML 锁文件 锁定版本号防冲突

4.9 常见问题与避坑

  1. 安装包失败:先检查网络,再检查渠道顺序。我遇到过bioconda和conda-forge顺序反了,导致旧版包被覆盖。建议bioconda放在最前面。
  2. 环境创建卡住:用conda clean -i清理索引缓存再试。如果仍然慢,手动指定--no-channel-priority跳过解析。
  3. 解压错误:磁盘空间不足。用df -h检查,Conda临时目录默认在/tmp,如果/tmp空间小,可以设置TMPDIR到有足够空间的目录。
# 设置临时目录到大数据盘
export TMPDIR=/data/tmp
conda install -c bioconda bwa
我的实战建议:
  • 每个项目建立一个独立的 project_root/environment.yaml,连带README写清楚创建命令。
  • 使用 conda list --revisions 可以查看历史操作,万一手残删了包,可以 conda install --revision N 回退。
  • Conda 环境可以放在项目目录下:conda create -p ./env,这样环境跟项目走,换机器直接删掉重建。