2. Conda 基础命令:把环境玩明白

好,咱们正式开始上手。很多做 RNA-seq 的朋友,最开始接触 Conda 时都一脸懵——怎么装包、怎么切环境、为什么装个软件还要管什么通道?我当年第一次跑转录组分析,就是因为不知道 Conda 环境怎么隔离,结果把服务器上的 Python 搞得乱七八糟,项目差点重做。

其实 Conda 核心就五件事:创建、激活、删除、装包、管通道。这五个弄熟,后面整个 RNA-seq 差异分析流程就能稳稳的。

Conda 核心命令知识体系 环境创建 conda create -n 激活/退出 conda activate 包安装/更新 conda install/update 环境删除 conda remove -n 通道管理 conda config --add channels 整体工作流:创建 → 激活 → 安装包 → 分析 → 退出/删除 每个 RNA-seq 项目对应一个独立环境,互不干扰

2.1 环境创建:给每个项目安个家

假设你正在做一个小鼠肝脏的转录组差异表达分析,需要用到 samtools、htseq-count 和 DESeq2。我建议你为这个项目单独创建一个环境,别把所有软件都堆在 base 里。为什么?因为不同项目对软件版本的要求经常打架。

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

# 创建时直接安装几个常用包(可选)
conda create -n rna_seq_env python=3.9 samtools fastqc

我自己有个习惯:创建环境时顺手指定 Python 版本。很多 RNA-seq 工具对 Python 版本敏感,比如某些版本的 HTSeq 在 Python 3.10 下会报错。指定版本,省的后面还要重装。

小技巧: 环境名尽量起的有意义,比如 rna_liver_v2 比 myenv1 强百倍。半年后你再回头看,能省下大量回忆时间。

2.2 环境激活与退出:切环境就这么简单

环境创建好了,得先进去才能用。激活和退出是日常最高频的操作。

# 激活环境(Linux / macOS)
conda activate rna_seq_env

# 激活环境(Windows 同样适用)
conda activate rna_seq_env

# 退出当前环境
conda deactivate

我见过不少新手在终端里敲了半天命令,结果发现自己一直在 base 环境里,软件装错地方。你想想看,如果你不小心在 base 里装了某个特定版本的工具,后续再建环境时就容易乱套。所以我现在每次跑项目前,都习惯先用 conda info --envs 看一眼当前在哪个环境里。

# 列出所有环境,当前环境前面会有 *
conda info --envs
注意: 激活环境后,终端前的提示符会变成 (rna_seq_env)。如果没看到这个括号,说明环境没激活成功。我有一次就是忘了这茬,装了一堆包到 base 里,项目换服务器时整个人都不好了。

2.3 包安装与版本控制:装对东西很重要

在 RNA-seq 流程里,你通常需要装 fastqc、trimmomatic、hisat2、samtools、htseq-count、R 以及 DESeq2 等等。安装命令很简单,但注意一点:要先把环境激活了再装,否则包会装到 base 里。

# 安装单个包
conda install samtools

# 安装多个包
conda install fastqc hisat2 htseq

# 安装指定版本(很重要!)
conda install samtools=1.9

# 安装特定版本区间
conda install "samtools>=1.9,<1.13"

# 更新某个包
conda update samtools

# 更新环境内所有包
conda update --all

版本指定在 RNA-seq 分析里特别关键。举个例子:samtools 1.9 和 1.10 在处理某些 BAM 文件时行为有细微差别。如果别人用 1.9 跑出来的结果跟你不一样,第一件事就是核对版本号。

安装包时如果遇到依赖冲突,Condan 会给出提示。这时候别硬装,我一般会换个通道试试,或者明确指定版本。冲突大多是某个包的依赖版本正好卡在另一个包的要求之外。

关于 R 包: 有些人习惯在 Conda 环境里直接装 R 和 Bioconductor 包。命令长这样:
conda install r-base=4.1
conda install bioconductor-deseq2
注意:R 包命名有时用 bioconductor- 前缀,有时用 r- 前缀,需要查一下。

2.4 环境删除与清理:该放手时就放手

做完一个项目,环境里那些包和依赖基本就没用了。留着占地方,而且版本积累多了可能跟新环境冲突。我通常只保留 base 和最多两三个活跃项目的环境,其余全部删掉。

# 删除指定环境(先退出要删除的环境)
conda deactivate
conda remove -n old_project_env --all

# 清理缓存(释放磁盘空间)
conda clean --all

conda clean --all 这个命令很多人不知道。它会把下载的 .tar.bz2 包缓存、索引缓存、临时文件全清掉。搞 RNA-seq 的机器通常磁盘空间紧张,跑几次差异分析就满了。定期清理能省出几十 G 的空间。我曾经在集群上帮人排查磁盘满了的问题,一查发现 .conda/pkgs 里躺着 40 多个旧版本的包,清理完立马腾出来 30 G。

别删 base: 删除 base 环境会导致 Conda 本身挂掉。如果想重置 base,用 conda update conda 或者重新安装,别直接 conda remove -n base --all。

2.5 环境克隆与导出:迁移环境就这么干

你在一台机器上配好的环境,想搬到另一台机器或者分享给同事,不用重新一个个装。Condan 提供了导出功能。我每次发布一个分析流程时,都会附带一个 environment.yaml 文件,别人直接一条命令就能复现我的环境。

# 导出当前环境到 yaml 文件
conda env export > environment.yaml

# 从 yaml 文件创建一模一样的环境
conda env create -f environment.yaml

# 克隆一个已有环境
conda create -n new_env --clone old_env

导出时要注意:conda env export 会记录当前操作系统和具体路径。如果你要跨平台分享(比如从 Linux 到 macOS),最好用 --from-history 参数,只记录你手动指定的包,不记录依赖的绝对版本。

# 跨平台更友好的导出方式
conda env export --from-history > environment_platform.yml

2.6 通道管理:知道东西从哪来

通道(channel)就是 Conda 去哪个镜像站或仓库下载包。默认的通道主要面向生物学软件,但很多 RNA-seq 工具(比如他的 hisat2、salmon)都在 bioconda 里。如果不配好通道,你可能找不到包。

我自己一般按顺序配三个通道:conda-forge、bioconda、defaults。顺序有讲究——conda-forge 放在前面,因为它的包更新最快且兼容性最好;bioconda 是生物信息的核心库;defaults 是备胎。

# 添加 bioconda 和 conda-forge 通道(最好按顺序加)
conda config --add channels defaults
conda config --add channels bioconda
conda config --add channels conda-forge

# 查看当前通道配置
conda config --show channels

# 从指定通道安装包(临时指定)
conda install -c bioconda hisat2

嗯,这里要注意:通道顺序决定了 Conda 在解决依赖时优先看哪个仓库。如果你把 bioconda 放在最前面,它可能会覆盖掉 conda-forge 里的某些包的新版本。我遇到过好几次因为通道顺序不对,导致装的 R 版本偏低,装不了最新版的 DESeq2。

国内用户建议: 访问国外通道经常超时。可以添加清华或中科大的 Conda 镜像,速度会快很多。比如:
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/
记得加到通道列表最前面,优先级最高。

2.7 常用 Conda 命令速查表

我把最常用的 Conda 命令整理成一个表,你直接拿过去参考。每次忘了参数就回来看一眼。

功能 命令示例
创建环境 conda create -n myenv python=3.9
激活环境 conda activate myenv
退出环境 conda deactivate
列出所有环境 conda info --envs
安装包 conda install samtools
安装指定版本 conda install samtools=1.9
更新包 conda update samtools
删除环境 conda remove -n myenv --all
清理缓存 conda clean --all
导出环境 conda env export > env.yaml
从文件建环境 conda env create -f env.yaml
添加通道 conda config --add channels bioconda
查看通道 conda config --show channels

2.8 常用避坑指南

这条路走了不少了,我给你总结几个我踩过的坑,你遇到了至少知道往哪躲。

  • 环境名不要用空格和特殊字符。 我以前用过 RNA-seq analysis 当环境名,结果激活时总报错。老老实实用下划线。
  • 安装速度慢?配镜像。 国外的 Conda 源动不动超时。国内用清华或中科大的镜像,安装速度能快 10 倍以上。
  • 装包时提示 UnsatisfiableError? 大概率是通道顺序不对,或者包版本冲突。我会先试试 conda search <包名> 看哪个版本可用,然后指定一个不冲突的版本。
  • conda 命令找不到? 检查 Conda 有没有初始化到你的 shell 里。运行 conda init 然后重启终端就能解决。
  • 别在 base 里装分析用的包。 base 环境是 Conda 自己用的,里面装太多包会导致依赖越来越复杂。我项目环境单独建,base 只放 Conda 本身和 jupyter 这类工具。