You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Snakemake引入include规则文件后执行异常,误判文件已存在

Snakemake主文件执行无任务,但单独运行规则文件正常

问题场景

项目文件夹结构:

├── config
│   └── config.yaml
├── results
├── Snakefile
└── workflow
    ├── envs
    ├── report
    ├── rules
    │   └── download.smk
    └── scripts

主Snakefile通过以下语句引入规则文件:

include: 'workflow/rules/download.smk'

download.smk内容:

configfile: './././config/config.yaml'

rule all:
    input:
        config["data_dir"] + "/ACBarrie_R1.fastq.gz",
        config["data_dir"] + "/ACBarrie_R2.fastq.gz",
        config["ref_dir"] + "/reference.fasta"

rule download_dataset:
    output:
        read1 = config["data_dir"] + "/ACBarrie_R1.fastq.gz",
        read2 = config["data_dir"] + "/ACBarrie_R2.fastq.gz",
        reference = config["ref_dir"] + "/reference.fasta"
    params:
        read1_url = config['samples']['read1_url'],
        read2_url = config['samples']['read2_url'],
        genome = config['genome']
    threads: config['cores']['download_dataset']
    shell:
        """
        wget -O {output.read1} {params.read1_url}
        wget -O {output.read2} {params.read2_url}
        wget -O {output.reference} {params.genome}
        """

执行主Snakefile时出现提示:
Assuming unrestricted shared filesystem usage. Building DAG of jobs... Nothing to be done (all requested files are present and up to date).
但实际目标文件并未生成;而单独执行命令snakemake -s workflow/rules/download.smk --cores 2时,规则能正常运行并生成文件。

核心原因

  • Rule All 被全局覆盖:Snakemake 仅允许存在一个 rule all 作为全局最终目标。若主Snakefile中已定义 rule all,引入download.smk后,其内部的rule all会被主文件的规则覆盖,导致主流程的rule all未包含下载任务的输出文件,Snakemake因此判定无任务需要执行。
  • 重复加载配置的潜在冲突:download.smk中独立加载配置文件,而主Snakefile若也加载了配置,可能因路径解析或变量重复导致config["data_dir"]等路径与预期不符,使Snakemake错误判定目标文件已存在。

解决方法

  1. 统一全局目标规则

    • 删除download.smk中的rule all定义
    • 在主Snakefile的rule all中添加下载任务的输出文件:
      # 主Snakefile
      configfile: 'config/config.yaml'
      include: 'workflow/rules/download.smk'
      
      rule all:
          input:
              config["data_dir"] + "/ACBarrie_R1.fastq.gz",
              config["data_dir"] + "/ACBarrie_R2.fastq.gz",
              config["ref_dir"] + "/reference.fasta",
              # 其他主流程目标文件...
      
  2. 统一配置加载

    • 移除download.smk中的configfile: './././config/config.yaml'语句
    • 在主Snakefile中统一加载配置,避免重复加载引发的变量冲突
  3. 显式指定运行目标
    若不想修改规则结构,可直接在运行主Snakefile时指定下载任务或目标文件:

    # 直接运行下载规则
    snakemake --cores 2 download_dataset
    # 或指定具体目标文件
    snakemake --cores 2 config["data_dir"]/ACBarrie_R1.fastq.gz config["data_dir"]/ACBarrie_R2.fastq.gz config["ref_dir"]/reference.fasta
    

内容的提问来源于stack exchange,提问作者George Odette

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 22:27:14