我正在使用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'
谢谢您的帮助!
答案 0 :(得分:1)
一个选项可能是使用os.path.abspath()
将相对路径扩展为绝对路径。如果路径相对于Snakefile所在的目录,则可能需要使用workflow.basedir
,其中包含Snakefile的路径。例如:
caption= os.path.join(workflow.basedir, "report/evaluation.rst")