激活snakemake中现有的conda环境

Lam*_*mma 6 python conda snakemake

如何让 Snakemake 激活我的环境列表中已存在的 conda 环境?

我知道您可以将其--use-conda.yaml环境文件一起使用,但这似乎会生成一个新环境,当环境已经存在时,这会很烦人。任何对此的帮助将不胜感激。

我尝试过使用:

conda:
    path/to/some/yamlFile
Run Code Online (Sandbox Code Playgroud)

但它只是返回环境中包的命令未找到错误

小智 5

这个问题仍然是 Google 上的热门话题,所以更新一下:

snakemake=6.14.0(2022-01-26) 起,使用现有的命名 conda 环境成为受支持的功能。

您只需将环境名称放入some-env-name规则conda指令(而不是.yaml文件)中并使用snakemake --use-conda

rule NAME:
    input:
        "table.txt"
    output:
        "plots/myplot.pdf"
    conda:
        "some-env-name"
    script:
        "scripts/plot-stuff.R"
Run Code Online (Sandbox Code Playgroud)

文档:https://snakemake.readthedocs.io/en/stable/snakefiles/deployment.html#using-already-existing-named-conda-environments

注意:建议稀疏地使用该功能,并environment.yaml更愿意指定一个文件来提高可重复性。


mer*_*erv 3

更喜欢 Snakemake 管理的环境

这是一个旧答案,来自 Snakemake 添加允许用户管理环境的功能之前。其他答案涵盖了较新的功能。尽管如此,我在这里保留这个答案,因为我相信它增加了问题的视角,以及为什么仍然不鼓励使用这个功能。具体来说,来自文档

重要的是,人们应该意识到这可能会妨碍再现性,因为工作流程依赖于该环境以完全相同的方式出现在执行工作流程的任何新系统上。本质上,您必须手动处理此问题在这种情况下。因此,强烈推荐并首选使用上述环境定义文件的方法。 ” [原文强调]


(大部分)原始答案

这在以前是不可能的,但我仍然认为这主要是一件好事。Snakemake 拥有环境的唯一所有权,通过要求更新 YAML 而不是直接使用conda (install|update|remove). 请注意,这种更新 YAML 并重新创建的做法是在 Pip 中混合时的 Conda 最佳实践,并且普遍采用它肯定不会有什么坏处。

Conda 做了很多硬链接,所以我不会过多地担心重复 -这大多是肤浅的。此外,如果您从希望使用的现有环境创建 YAML ( conda env export > env.yaml) 并将其提供给 Snakemake,那么您已下载的所有相同包都将在 Snakemake 创建的环境中使用。


如果空间确实是如此紧张的资源,您可以简单地不使用 Snakemake 的--use-conda标志,而是激活您的命名环境作为shell您提供的命令或脚本的一部分。我会非常小心,不要操纵这些环境,或者至少非常努力地跟踪对它们所做的更改。也许,可以考虑跟踪版本控制下的输出conda env export > env.yaml,并将该 YAML 作为输入文件放入激活环境的 Snakemake 规则中。通过这种方式,Snakemake 可以检测到环境已发生变化,并且下游文件可能已过时。