Snakemake工作流未触发全部规则问题求助
解决Snakemake工作流中部分规则不自动执行的问题
你的判断完全正确——Snakemake是基于依赖关系驱动的工作流引擎,只有当某个规则的输出是最终目标(通常由rule all定义)或者下游规则的输入时,它才会被自动触发执行。你当前的rule all只关联了task/{job}/taskOutput.tab相关的规则链,而make_parameter_file和build_target的输出没有被任何需要它们的目标关联,所以Snakemake不知道需要执行这些规则。
解决方案:扩展rule all的输入范围
只需要把make_parameter_file和build_target的输出文件添加到rule all的input列表中,让Snakemake明确这些是工作流需要完成的最终目标之一。修改后的rule all如下:
rule all: input: dynamic("task/{job}/taskOutput.tab"), "par/parameters.txt", # 关联make_parameter_file的输出 "build_target.done" # 关联build_target的输出
额外说明
- 如果后续
par/parameters.txt或者my_target(build_target的核心产物)需要被其他规则作为输入使用,其实不需要把它们加到rule all里——只要在对应规则的input中引用它们,Snakemake就会自动触发生成它们的规则。比如:
rule some_other_rule: input: "par/parameters.txt" # ... 其他规则定义
- 你给
build_target规则用touch("build_target.done")作为输出是个很合理的设计,这能让Snakemake准确追踪到该规则是否已经执行完成,避免重复运行。
修改后再执行snakemake -p -s snakefile,所有规则就会按照依赖关系自动依次执行了。
内容的提问来源于stack exchange,提问作者yahan
相关产品推荐
相关产品推荐

