Snakemake仅运行第一条规则不执行全部任务,如何修复Snakefile?
问题根因
Snakemake不会按照规则的书写顺序依次执行所有规则,默认执行逻辑是:以文件中定义的第一条规则为目标规则,仅生成该规则对应的输出文件后就结束。你把用来指定最终目标的all规则放在了所有规则的末尾,因此运行无参数的snakemake命令时,只会执行排在最前面的do00_download_step01_download_规则。
另外你当前的Snakefile还存在一个语法问题:do99_figures_step01_make_figure规则的input部分两个输入文件之间缺少逗号分隔,后续执行到该规则时会触发语法错误。
修复方法
- 先修复语法问题,给
do99_figures_step01_make_figure的两个输入文件之间添加逗号:
rule do99_figures_step01_make_figure: input: "plot/dist.png", "plot/heatmap.png" output: "figs/fig01.svg" run: from lib.do99_figures import do99_figures_step01_make_figure do99_figures_step01_make_figure()
- 再选择以下任意一种方案解决执行顺序问题:
- 调整规则顺序:把
all规则移动到Snakefile的最开头,这样运行无参数的snakemake时,就会以all规则的输入figs/fig01.svg为最终目标,自动推导依赖链,执行所有需要的前置步骤。 - 运行时指定目标规则:不需要修改Snakefile,执行命令时手动指定目标为
all即可:snakemake all
内容的提问来源于stack exchange,提问作者user3521099
相关产品推荐
相关产品推荐

