在蛇形make中将include用于使用report()函数的规则时的工作目录

时间:2019-10-04 09:25:04

标签: snakemake

我正在使用snakemake对我的工作流程进行编程。为了重用代码,最简单的方法是使用语句 include: "path/to/other/Snakefile"

这在大多数情况下都可以正常使用,但是在通过report()函数创建报告时失败。问题在于它找不到为字幕指定的.rst文件。

因此,似乎report()具有另一个Snakefile所在的工作目录,而不是主Snakefile之一。

是否有灵活的解决方法,以便它的行为就像被加载到Snakefile中一样,然后像在主Snakefile中一样被执行?

这是另一个Snakemake文件中的示例规则:

rule evaluation:
    input:
        "data/final_feature.model"
    output:
        report("data/results.txt",caption="report/evaluation.rst",category ="Evaluation")
    shell:
        "Rscript {scripts}/evaluation.R {input}"

这通过以下方式包含在主Snakefile中:

include: "../General/subworkflows/evaluation.snakemake"

这是表明文件不存在的错误消息:

WorkflowError:
Error loading caption file of output marked for report.
FileNotFoundError: [Errno 2] No such file or directory: '.../workflows/General/subworkflows/report/evaluation.rst'

谢谢您的帮助!

1 个答案:

答案 0 :(得分:1)

一个选项可能是使用os.path.abspath()将相对路径扩展为绝对路径。如果路径相对于Snakefile所在的目录,则可能需要使用workflow.basedir,其中包含Snakefile的路径。例如:

caption= os.path.join(workflow.basedir, "report/evaluation.rst")