Snakemake 只运行第一条规则,而不是全部

1 workflow rules snakemake

我的蛇文件看起来像这样。

rule do00_download_step01_download_:
    input:
        
    output:
        "data/00_download/scores.pqt"
    run:
        from lib.do00_download import do00_download_step01_download_
        do00_download_step01_download_()
rule do00_download_step02_get_the_mean_:
    input:
        "data/00_download/scores.pqt"
    output:
        "data/00_download/cleaned.pqt"
    run:
        from lib.do00_download import do00_download_step02_get_the_mean_
        do00_download_step02_get_the_mean_()
rule do01_corr_step01_correlate:
    input:
        "data/00_download/cleaned.pqt"
    output:
        "data/01_corr/corr.pqt"
    run:
        from lib.do01_corr import do01_corr_step01_correlate
        do01_corr_step01_correlate()
rule do95_plot_step01_correlations:
    input:
        "data/01_corr/corr.pqt"
    output:
        "plot/heatmap.png"
    run:
        from lib.do95_plot import do95_plot_step01_correlations
        do95_plot_step01_correlations()
rule do95_plot_step02_plot_dist:
    input:
        "data/00_download/cleaned.pqt"
    output:
        "plot/dist.png"
    run:
        from lib.do95_plot import do95_plot_step02_plot_dist
        do95_plot_step02_plot_dist()
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()
rule all:
    input:
        "figs/fig01.svg"
Run Code Online (Sandbox Code Playgroud)

我已按顺序排列规则,希望这能确保所有步骤都按该顺序运行。但是,当我运行时snakemake,它只运行第一条规则,然后退出。

我已经单独检查了所有步骤(我导入的函数)是否运行良好,以及输入和输出文件的路径。一切看起来都很好。所以我猜测问题出在我格式化蛇文件的方式上。我是新手snakemake(初级)。因此,如果有人指出我应该如何解决这个问题,那将会非常有帮助。

小智 5

这是预期的行为。这是文档中的相关部分:

此外,如果在命令行中没有给出目标,Snakemake将定义Snakefile的第一条规则作为目标。因此,最佳实践是all在工作流程的顶部设置一条规则,将所有通常需要的目标文件作为输入文件。假设第一条规则的输出是目标。

如果将 移动rule all:到 Snakefile 的顶部,它应该按预期工作。

  • @Ramirez Snakemake 查看第一条规则(通常称为“all”)来确定管道的最终输出是什么。然后,它向后移动以确定创建此类最终输出所需的文件。如果“plot/dist.png”不在规则“all”中,并且不需要生成最终输出,则不会执行创建“plot/dist.png”的规则。这有点违反直觉,但一旦你习惯了,它就会是一种有用的行为。 (2认同)