环境搭建:把坑填平,再跑分析

说实话,RNA-seq 的差异表达分析,最让人头疼的往往不是统计学原理,而是环境搭建。我记得自己第一次搭环境时,光 conda 就重装了三次,R 包冲突到怀疑人生。所以这一章,我把踩过的坑和惯用的套路一并倒出来,希望能帮你省下几天时间。

Linux 基础:够用就行

你不需要成为 Linux 运维专家。我日常做 RNA-seq 分析,其实只用到了十几条命令。核心就三个:目录操作、文件浏览、权限管理。

常见的文件系统结构你得心里有数:/home 放用户数据,/tmp 放临时文件,/opt 放共享软件。我建议在 /home/你的用户名 下建三个文件夹:

mkdir -p ~/rnaseq/{raw_data,results,scripts}

这样后续的比对、定量、差异表达,每个阶段都有地方搁数据,不会乱成一锅粥。

至于常用的命令,我整理了一个速查表,你贴在工位上就行:

操作场景命令示例说明
查看文件前几行head -n 20 sample.fastq快速检查格式
统计行数wc -l *.fq.gz估算 reads 数量
查找文件find . -name "*.bam"递归搜索
后台运行nohup bash run.sh &断开 SSH 也不停
磁盘用量du -sh *看哪个文件夹占空间

一个小经验:每次运行新命令前,先 which 命令名 看看它到底在哪。我就因为系统自带的旧版 Python 和新装的 conda Python 打架,浪费过半天。

用 conda 和 mamba 管软件:告别依赖噩梦

生物信息学软件的依赖关系,简直就是一团乱麻。你想想看,不同工具对 Python、GCC、Boost 的要求可能完全相反。conda 正好能解决这个——它用隔离环境让每个软件各玩各的。

我个人习惯装 Miniconda3 而不是 Anaconda,因为 Anaconda 预装太多我用不到的包。安装命令很简单:

wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash Miniconda3-latest-Linux-x86_64.sh

安装时注意两个选项:一是同意许可协议,二是问是否初始化 conda,选 yes。装好后关掉终端重新打开,你应该能看到 (base) 字样。

然后我推荐立刻换用 mamba。mamba 是 C++ 写的包管理器,比 conda 快了不止一倍。装法就一行:

conda install -n base -c conda-forge mamba

后续你把所有 conda install 替换成 mamba install,体验会丝滑很多。我在项目 B 里用 mamba 装一个 40 个依赖的大环境,原来 conda 要解 15 分钟,mamba 五分钟就完事了。

配置好国内镜像源

conda 默认的国外源下载速度很慢。我一般配清华的镜像,你要是有更顺手的也可以用其他镜像:

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 --set show_channel_urls yes

为什么先加这两个就够了?因为 95% 的 RNA-seq 相关包都在 main 和 free 里面。需要 bioconda 时再加:

conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda

实战:创建 RNA-seq 分析环境

我习惯按项目单独建环境,这样不同版本的软件不会打架。下面这个环境包含了比对、定量和差异表达的核心工具:

mamba create -n rnaseq -y \
  star=2.7.10a \
  samtools=1.17 \
  subread=2.0.3 \
  fastqc=0.11.9 \
  multiqc=1.14

mamba activate rnaseq

装好后验证一下:

STAR --version
samtools --version
featureCounts -v

避坑指南:我曾经在 conda 环境里同时装了不同版本的 Python 包,结果 import 时报错说库不兼容。后来我养成了一个习惯——每次装新环境前,先 conda clean -a 清一下缓存,防止旧索引干扰。

R 和 Bioconductor:差异表达的主战场

差异表达分析最后的统计部分,我基本都是在 R 里完成的。Bioconductor 是专门为高通量组学数据设计的 R 包仓库,里面有 DESeq2、edgeR、limma 这些经典工具。

装 R 语言核心

我建议不要用系统自带的 R,版本太旧。直接用 conda 装:

mamba install -c conda-forge r-base=4.3.1

注意 r-base 是 conda 里的命名方式,和普通的 R 语言是一回事。装完后敲 R --version 确认。

装 Bioconductor 包

Bioconductor 包有好几种装法。我一般用 BiocManager,因为它的依赖解析做得很全。在 R 终端里执行:

if (!requireNamespace("BiocManager", quietly = TRUE))
    install.packages("BiocManager")
BiocManager::install(version = "3.18")

然后装差异表达的核心包:

BiocManager::install(c("DESeq2", "edgeR", "limma", "tximport"))

如果网速慢,可以在 R 里配一下国内镜像:

options(repos = c(CRAN = "https://mirrors.tuna.tsinghua.edu.cn/CRAN/"))

验证一下包是否装好:

library(DESeq2)
library(edgeR)
library(limma)

不报错就说明成了。

个人习惯:我每次新建一个 R 项目,都会在项目根目录放一个 renv.lock 文件,记录用到的所有包版本。这样换一台机器或者让同事复现时,直接 renv::restore() 就对齐了,省掉很多扯皮。

环境搭建整体流程

我把整个搭建路线画了张图,你可以对照着检查自己缺了哪一步:

第4章 环境搭建知识体系 Linux基础操作 conda/mamba R/Bioconductor 目录组织与命令 隔离环境创建 DESeq2/edgeR 核心原则 • Linux: 够用就好,掌握目录、文件、权限、后台运行即可 • conda/mamba: 按项目建隔离环境,不用全局装包 • R/Bioc: 用 BiocManager 统一管理,用 renv 锁版本

常见问题与排查套路

环境搭好了,运行时总会出点幺蛾子。我把高频问题整理成清单,你遇到时可以照着找:

问题现象常见原因排查命令
command not found软件未装或环境未激活conda list | grep 包名
Python 导入报错包版本不对或 Python 版本冲突python -c "import 包名; print(包名.__version__)"
R 包安装失败缺少系统依赖库sudo apt-get install libcurl4-openssl-dev (Ubuntu)
conda 环境卡死索引文件损坏或磁盘空间不足conda clean -i 或 df -h

最后一条建议,也是我自己的血泪教训:每次装完新环境,立刻跑一个最小测试。比如装完 DESeq2 后,找个公共数据集跑一遍 DESeqDataSetFromMatrix,确认所有依赖都能正常加载。不要等到正式分析时才发现包没装全,那会儿再临时补装,可能会破坏已有的环境依赖平衡。