【发布时间】:2020-10-23 00:55:13
【问题描述】:
关于 snakemake 和使用多个配置文件的快速问题。
我正在为基因组预处理创建一个相当大的管道,其想法是它是用户友好的,并且在用户能力方面占最低公分母。
因此,不允许用户在主配置文件中定义某些工具使用的线程。我想实现snakemake的“workflow.cores * percent”功能,即;我可以为每个工具指定总内核的百分比(在命令行中使用 --cores # 定义)。
这让事情变得简单,不会让用户对主配置文件中的所有选项感到困惑。但我仍然希望允许用户根据需要微调线程数。这个想法是我有一个没有线程号的主配置文件,还有一个带有线程号的第二个配置文件。
如果用户决定要使用自己确定的线程数,他们将简单地(在主配置中)提供一个肯定的键,类似于:manualThreadChoice: "yes"
并且在 Snakefile 中有一个简单的 if 语句,如果 manualThreadChoice 是肯定的,则相应地为相应的规则提供线程数,否则只使用自动定义的线程百分比。
根据这个关于biostars的问题:https://github.com/yanailab/celseq2/issues/33
现在可以定义多个配置文件。
见评论:
“感谢您报告此问题。这是因为snakemake 更新了他们现在支持多个配置文件的 API。根据他们的日志,配置文件已更改为配置文件。请参阅:snakemake/snakemake@23624ee#diff-88e96378bf2405c8a8f8ac971519039e。”
所以不要用
调用我们的配置文件configfile: "path/to/config.yaml"
我们可以使用:
configfiles:
我的问题是,我们是否会提供两个单独的路径作为文件列表的一部分: 即
configfiles: ["path/to/config1.yaml", "path/to/config2.yaml"]
然后我们如何从不同的配置中访问密钥。由于我们将使用单个配置文件:
config['key']
我尝试通过索引访问不同的配置文件:
config[0]['key']
但这不起作用。
我正在使用 Snakemake 5.7.0,我相信它是一个具有这种多配置文件功能的版本。
【问题讨论】:
-
如果打印配置,输出是什么?我的猜测是他们只是互相覆盖。
-
根据我在源代码中看到的评论 (
# get values to override. Later configfiles override earlier ones.) 我相信 @Maarten-vd-Sande 是对的。configdict 将包含在解析连续配置文件时最后获得的条目。
标签: python multithreading configuration config snakemake