如何使用".yaml"在 snakemake 中使用"envmodules"和"--use-envmodules"在集群上加载模块



我有一个类似的snakefile(仅适用于dep:

rule test:
input:
text='catthis.txt'
output:
"test.txt"
envmodules: 
"modules.yaml"
shell:
"cat {input.text} > ./{output}"

我的modules.yaml文件包含以下内容:

modules:
"StdEnv/2020",
"gcc/9.3.0"

所以最后,我想要这样的东西,当蛇制造被称为:时

rule test:
input:
text='catthis.txt'
output:
"test.txt"
envmodules: 
"StdEnv/2020",
"gcc/9.3.0"
shell:
"cat {input.text} > ./{output}"

也许这是不可能的,但我在这里的蛇制造网站上找不到允许这样做的地方。但对我来说,有一个文件可以调用,而不是将要加载的模块粘贴到所有规则中(这里我展示了一个,但假设我有50个规则…(

运行snakemake时(假设所有内容都在同一目录中(

snakemake -p --cores 1 --use-envmodules

它不起作用(使用modules.yaml(,但如果模块直接放在snakefile中,它确实起作用。

catthis.txt仅包含此文本Lorem ipsum dolor sit amet,再次用于演示。

我的解决方案是将envmodule放在配置文件中:

# config.yaml
envmodules:
stdenv: "StdEnv/2020"
gcc: "gcc/9.3.0"

然后你可以打电话给

configfile: 'config.yaml'
envmodules = config['envmodules']
rule test:
input:
text='catthis.txt'
output:
"test.txt"
envmodules: 
envmodules['stdenv'],
envmodules['gcc']
shell:
"cat {input.text} > ./{output}"

这将使您更清楚地了解需要哪些envmodule,同时允许您在一个地方跟踪版本。我用类似的东西做容器。

如果你真的想保持yaml的独立性,你可以加载多个配置文件,尽管确保密钥不被覆盖更具挑战性。

最新更新