Snakemake WorkflowError排查:目标规则含通配符问题
Snakemake报错
WorkflowError: Target rules may not contain wildcards的原因及解决方法 错误原因
- 直接运行带通配符的规则:你用命令
snakemake ... A_checkm指定运行A_checkm规则,但这个规则包含通配符{genome},Snakemake无法自动解析通配符对应的具体样本,因此抛出该错误。 rule all定义不规范:你的rule all输入使用了通配符{genome},但未提供具体的基因组列表,Snakemake无法明确需要生成哪些输出文件/目录。
解决步骤
1. 提取所有待处理的基因组名称
在Snakefile最开头添加代码,自动从输入文件目录中提取所有基因组名称:
import glob # 从../data/genomesFna/下的文件名中提取genome标识符 genomes = [ filename.split("/")[-1].replace("_genomic.fna.gz", "") for filename in glob.glob("../data/genomesFna/*_genomic.fna.gz") ]
2. 修正rule all规则
用expand()函数生成具体的输出路径列表,替换原来的通配符输入:
rule all: input: expand("../data/A_checkm/{genome}", genome=genomes)
3. 正确运行Workflow
不要直接指定A_checkm作为运行目标,而是运行默认的rule all,它会自动触发所有需要的A_checkm任务:
snakemake -s Snakefile --cores 10
如果需要单独处理某个基因组,直接指定对应的输出目录作为目标:
snakemake -s Snakefile --cores 10 ../data/A_checkm/你的基因组名称
额外优化建议
- 可以在
rule A_checkm的输入中添加glob_wildcards来更稳健地匹配输入文件,避免手动提取可能出现的错误。 - 临时目录的处理可以考虑使用Snakemake内置的
temp()函数,但当前的手动清理方式也能正常工作。
内容的提问来源于stack exchange,提问作者Dhouha Grissa
相关产品推荐
相关产品推荐

