You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Snakemake管道执行报错:无法识别Snakefile或触发AssertionError

问题描述

运行Snakemake管道时,要么触发AssertionError,要么提示无法找到Snakefile,提交到集群的bash脚本几乎立即失败。报错信息包括:

  • assert v is not None → AssertionError
  • snakemake: error: argument --snakefile/-s: expected one argument

核心问题定位

你的bash脚本中Snakemake命令的参数写法存在多处错误,同时未正确加载配置变量,这是导致问题的直接原因:

  1. --snakefile snakefile=$SNAKE_FILE 写法错误:--snakefile(或短参数-s)后直接跟文件路径,不需要额外的snakefile=前缀
  2. --configfile snakefile config_file=$CONFIG_FILE 写法错误:--configfile后直接跟配置文件路径,多余的snakefile属于无效参数,还会导致config_file=被错误解析
  3. bash脚本未加载config.yml中的变量,导致$SNAKE_FILE、$REF_FASTA等变量为空值,触发AssertionError

修复步骤

1. 修正bash脚本参数与变量加载

bash脚本需要先加载config.yml的变量,并修正Snakemake命令参数:

#!/bin/bash

# 加载config.yml中的变量(使用绝对路径确保集群环境能找到)
source /path/to/pipeline/config/config.yml

# 切换到仓库目录(原config.yml中的cd命令移到此处执行)
cd $REPO_DIR

# 激活conda环境(集群环境若source无效,可替换为conda activate)
source activate pipeline_env

# 验证变量是否加载成功(可选,用于调试)
echo "Snakefile路径: $SNAKE_FILE"
echo "配置文件路径: $CONFIG_FILE"

# 正确的Snakemake命令
snakemake \
    --cores \
    --snakefile $SNAKE_FILE \
    --configfile $CONFIG_FILE \
    --config output_dir=$OUTPUT_DIR fastq_dir=$FASTQ_DIR anc_dir=$ANC_DIR ref_fasta=$REF_FASTA \
    --use-conda \
    --conda-prefix="$HOME/.snakemake/conda"

echo -e "\nDONE!\n"

2. 修正config.yml文件

移除config.yml中的shell命令(yaml为配置文件,无法执行shell操作):

REPO_DIR="/path/to/pipeline"

REF_FASTA ="$REPO_DIR/data/genome/sacCer3.fasta"

FASTQ_DIR="$REPO_DIR/pipelinetest/fastq"
OUTPUT_DIR="$REPO_DIR/pipelineoutput"
ANC_DIR="$REPO_DIR/pipelineanc"

LOG_FILE="$OUTPUT_DIR/00_logs/pipeline.log"
SNAKE_FILE="$REPO_DIR/workflow/Snakefile.py"
CONFIG_FILE="$REPO_DIR/config/config.yml"

3. 排查Snakefile潜在问题

若修复后仍触发AssertionError,检查以下内容:

  • 确认config['fastq_dir']对应的目录存在,且包含符合{sample}_R1_001.fastq.gz格式的文件
  • 在Snakefile中添加空值判断,避免因SAMPLES为空导致后续错误:
SAMPLES = list(set(glob_wildcards(f"{config['fastq_dir']}/{sample}_R1_001.fastq.gz").sample))
if not SAMPLES:
    raise ValueError("未找到任何符合格式的fastq文件,请检查fastq_dir路径")

4. 前置环境验证

  • 运行脚本前手动创建OUTPUT_DIR/00_logs目录,避免规则执行时因目录不存在报错
  • 用ls $SNAKE_FILE验证Snakefile路径是否正确存在

内容的提问来源于stack exchange,提问作者dgode19

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 11:35:20