Snakemake管道执行报错:无法识别Snakefile或触发AssertionError
问题描述
运行Snakemake管道时,要么触发AssertionError,要么提示无法找到Snakefile,提交到集群的bash脚本几乎立即失败。报错信息包括:
assert v is not None→AssertionErrorsnakemake: error: argument --snakefile/-s: expected one argument
核心问题定位
你的bash脚本中Snakemake命令的参数写法存在多处错误,同时未正确加载配置变量,这是导致问题的直接原因:
--snakefile snakefile=$SNAKE_FILE写法错误:--snakefile(或短参数-s)后直接跟文件路径,不需要额外的snakefile=前缀--configfile snakefile config_file=$CONFIG_FILE写法错误:--configfile后直接跟配置文件路径,多余的snakefile属于无效参数,还会导致config_file=被错误解析- 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
相关产品推荐
相关产品推荐

