2. 安装与配置:Snakemake及其依赖

好了,咱们直接开始搭环境。说实话,Snakemake本身是个Python包,装起来不难。但真正麻烦的是它的依赖链——Python版本、Conda通道、还有Mamba这个加速器。我见过不少人在这一步卡住,结果后面跑流程各种报错。

嗯,咱们从头捋一遍。先装Python,再装Conda/Mamba,最后装Snakemake。顺序别搞反。

重要提示: 不要使用系统自带的Python(比如macOS或Linux自带的),版本太老或缺少某些库。我建议用Miniconda来管理Python环境,干净又隔离。

2.1 Python环境准备

Snakemake要求Python 3.8及以上。我个人习惯用Miniconda,因为它只带Python和conda,不像Anaconda那样臃肿。

下载Miniconda:

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

# macOS (Intel)
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-MacOSX-x86_64.sh
bash Miniconda3-latest-MacOSX-x86_64.sh

# macOS (Apple Silicon)
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-MacOSX-arm64.sh
bash Miniconda3-latest-MacOSX-arm64.sh

安装过程中一路yes,最后问是否初始化conda,选yes。装完之后关掉终端重新打开,命令行前面会出现 (base) 字样。

验证一下:

conda --version
python --version

如果Python版本低于3.8,别慌。你可以在base环境里升级,但我建议单独建一个Snakemake专用环境,干净。

小技巧: 我每次都会先建一个叫 snakemake_env 的环境,指定Python版本。这样后续装其他包不会污染base环境。
conda create -n snakemake_env python=3.10
conda activate snakemake_env
python --version  # 确认是3.10

2.2 Conda/Mamba安装

Conda已经装好了。但直接用它装Snakemake会很慢,因为Snakemake依赖的包多,Conda求解环境依赖是出了名的慢。

所以,咱们需要Mamba——一个用C++重写的Conda替代品,速度能快5到10倍。我曾经在集群上等conda solve等了半小时,换了Mamba后30秒搞定。

安装Mamba:

conda install -n base -c conda-forge mamba

注意,这里把mamba装到base环境里。装好后,所有本应使用 conda install 的地方都可以用 mamba install 替代。命令格式完全一样。

验证一下:

mamba --version

如果出现版本号,恭喜。如果报错找不到命令,检查是不是没激活base环境。别笑,我见过有人直接在终端里敲,结果环境没激活。

避坑: 有些系统(比如CentOS 7)自带的glibc版本太老,Mamba会报glibc的错误。这时候你检查一下 ldd --version,如果低于2.17,建议用 conda install -c conda-forge mamba 强制指定通道,实在不行就换Docker。

2.3 安装Snakemake

现在用Mamba来装Snakemake,记得先激活你刚建好的环境:

conda activate snakemake_env
mamba install -c conda-forge -c bioconda snakemake

-c conda-forge -c bioconda 这两个通道很重要。Snakemake的依赖大部分在conda-forge里,但有些生物信息学相关包在bioconda里。我习惯把两个通道都写上,省得后面缺包。

安装过程会列出一大堆依赖包——嗯,Snakemake自己不算大,但它的子依赖(比如graphviz、jinja2、networkx、pyyaml等)加起来大概几十个。耐心等几分钟。

如果你在只能内网访问的服务器上装,那可能会遇到网络问题。我建议提前下载好conda包的tar.bz2文件,然后离线安装。不过更简单的办法是——用pip。Snakemake也支持pip安装:

pip install snakemake

但我个人不太推荐pip。因为Snakemake的一些可选依赖(比如报告生成、集群提交功能)需要二进制包,pip有时会漏掉。用Mamba装最稳妥。

安装内容对比:
方式 优点 缺点 推荐场景
Mamba 快、依赖完整、自动处理环境 需要提前装conda + mamba 新环境、有网络
Conda 不需要额外安装 非常慢、手动排查依赖时烦 临时测试
pip 简单、不受conda通道限制 缺失某些系统级依赖 快速验证、容器内

2.4 验证安装

装完后,确认一下:

snakemake --version

如果返回类似 7.32.4 的版本号,说明Snakemake核心装好了。

再跑一个最简单的测试:写一个空的Snakefile,然后用snakemake -n看看会不会报错。

cd ~
mkdir test_snakemake
cd test_snakemake
touch Snakefile
snakemake -n

正常输出是:Nothing to be done (all files up to date). 如果报错说找不到Snakefile,检查一下文件名是否拼对了(首字母大写)。

小提示: 我习惯把Snakemake装好之后,顺手装上 graphviz 和 pygraphviz,这样后面生成DAG图时能有可视化。命令:
mamba install -c conda-forge graphviz
pip install pygraphviz

2.5 常见问题与避坑指南

说说我踩过的几个坑吧。

  • 问题1: 安装时网络超时。国内的conda源经常被墙,解决方案是换清华镜像源:
    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 --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda/
    conda config --set show_channel_urls yes
    然后再用mamba安装。我曾经在客户内网里,只能先下载好所有的conda包,然后离线安装,折腾了一下午。所以有网络的时候尽量一次搞定。
  • 问题2: 激活环境后,snakemake命令找不到。有可能你装在了base环境,但当前环境没激活。用 conda list | grep snakemake 先看看包在不在。如果不在,再装一次。
  • 问题3: 报错 ModuleNotFoundError: No module named 'snakemake'。大概率是Python版本不匹配。检查一下你当前环境是不是用的Python 3.10?我建议统一用3.10,因为3.11之后有些包还没完全兼容。
  • 问题4: 在HPC集群上安装,用户没有写权限。这时候可以用 --prefix 指定安装到自己的home目录:conda create --prefix ~/snakemake_env python=3.10。激活时用 conda activate ~/snakemake_env。

还有一个很常见的问题——Windows用户。Snakemake虽然支持Windows,但我在Windows上跑过几次,总会遇到路径分隔符、权限等乱七八糟的问题。我个人强烈建议用WSL2(Windows Subsystem for Linux)或者直接在Linux/Mac上做。如果你是Windows,装个Ubuntu WSL,然后按照Linux的步骤来,省心很多。

注意: Snakemake在Windows原生环境下,有些功能(比如集群提交、符号链接)不支持。非要Windows的话,至少用Conda安装并启用 --windows-long-paths 选项。但我不推荐长期使用。

好了,到这一步,你的Snakemake环境应该已经跑起来了。我们来总结一下整个安装流程——从零到能跑通第一个Snakemake命令。

Snakemake 安装与配置流程 1. 安装 Miniconda 2. 创建 Python 环境 3. 安装 Mamba 4a. Mamba 安装 Snakemake 4b. pip 安装 Snakemake 5. 验证安装 完成:可以使用 Snakemake 了

这张图把整个流程串起来了:从Miniconda开始,到创建环境、安装Mamba,再选择用Mamba还是pip装Snakemake,最后验证。我个人更推荐走左边的Mamba路线,但如果你只临时用一下,pip也行。

装好之后,你就能用它来写Snakefile、跑工作流了。嗯,下一件事就是写第一个Snakefile。不过那得留到下一章再说。

要点回顾:
  • 先装Miniconda,再创建隔离环境(Python 3.10)
  • 安装Mamba替换Conda解决依赖速度
  • 用 mamba install -c conda-forge -c bioconda snakemake
  • 验证:snakemake --version + 空Snakefile测试
  • 遇到网络慢就换清华镜像,Windows用户请用WSL