我正在使用snakemake(v7.22.0)在集群上执行多个作业。我有几个不同版本的工作流程,有时会并行执行,其中涉及更改配置文件(和其他文件)。我的问题是,如果我正确理解了行为,如果我在某些作业开始在集群上运行之前编辑配置文件,那么它们会在编辑后读取配置文件,并使用与原始工作流程时不同的值创造了工作的人就被创造了。特别是,这会更改工作目录,因此相对路径变得不正确。 我根据作业的标准输出看到这一点,它重申了配置,例如
{'workdir': 'workdir1', 'seeds': ...}
但是对于源自同一 Snakemake 会话的不同作业,我得到了不同的“workdir”值。
这确实是snakemake在远程规则中的行为,还是我弄错了?如果是这样,我可以做什么才能更改配置并仍然从所有远程作业获得一致的结果?在我的场景中使用多个配置文件会导致更多人为错误。
提前致谢!
如果不同的工作流程使用不同的配置,我可能会将配置文件拆分为“通用”文件和“工作流程特定”文件。然后,每个版本的工作流程将读取这两个文件。
或者,在配置文件中添加一些条目来指示 Snakemake 使用什么。例如。你的配置文件:
common_option1: foo
common_option2: bar
workflow_A:
workdir: /some/path
workflow_B:
workdir: /other/path
然后在工作流程文件版本“A”之上:
WORKFLOW = 'workflow_A'
workdir = config[WORKFLOW]['workdir']
然后在工作流程文件版本“B”之上:
WORKFLOW = 'workflow_B'
workdir = config[WORKFLOW]['workdir']