导入GitHub来源Snakemake模块时本地rule all目标被篡改问题问询
Snakemake 导入外部Snakefile后默认执行目标异常解决方案
问题根因
Snakemake的默认目标判定逻辑为:当运行时未显式指定执行目标时,程序会选择所有解析完成的规则中第一个不存在上游依赖的规则作为默认执行目标,而非优先匹配名为all的规则。
你导入的repo2模块中的wf2_nonsense规则早于你本地的rule all完成解析,且该规则无其他规则依赖,因此被Snakemake判定为默认执行目标,导致本地all规则未被触发。
解决方法
- 方案1:显式声明默认目标。在你本地Snakefile的末尾(所有规则定义完成后)添加如下代码即可固定默认执行目标:
该配置优先级高于解析顺序,不受导入规则的影响。default_target: all - 方案2:运行时显式指定目标。修改你
run.sh中的Snakemake启动命令,末尾加上all参数,直接指定要执行的规则:snakemake [原有其他运行参数] all - 方案3:按需导入外部规则。使用Snakemake的模块导入语法仅引入你需要的规则,而非全量导入整个Snakefile,避免无关规则进入当前工作流:
module other_workflow: snakefile: "github://lpagie/repo2/path/to/snakefile" # 可按需指定要导入的规则,避免无关规则引入 use rule 所需规则名 from other_workflow as wf2_所需规则名
验证说明
采用上述任意方案修改后,再次运行工作流即可得到预期的output/final输出,不会触发repo2中的无关规则,无需提交官方issue。
内容的提问来源于stack exchange,提问作者Ludo
相关产品推荐
相关产品推荐

