2. Conda 基础命令:把环境玩明白
好,咱们正式开始上手。很多做 RNA-seq 的朋友,最开始接触 Conda 时都一脸懵——怎么装包、怎么切环境、为什么装个软件还要管什么通道?我当年第一次跑转录组分析,就是因为不知道 Conda 环境怎么隔离,结果把服务器上的 Python 搞得乱七八糟,项目差点重做。
其实 Conda 核心就五件事:创建、激活、删除、装包、管通道。这五个弄熟,后面整个 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 会给出提示。这时候别硬装,我一般会换个通道试试,或者明确指定版本。冲突大多是某个包的依赖版本正好卡在另一个包的要求之外。
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。
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 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 这类工具。