【问题标题】:Conda environment is not activated in snakemake for rules declared as local对于声明为本地的规则,未在 snakemake 中激活 Conda 环境
【发布时间】:2020-10-31 18:48:31
【问题描述】:

我在使用 Snakemake v5.26.1 时遇到问题,我不确定这是错误还是我做错了什么。

我有以下规则:

rule multiqc:
input:
    expand('results/{project}/fastqc/{sample}/{sample}_R{idx}_fastqc.{ext}', project=PROJECT, sample=SAMPLES, idx=[1,2], ext=['html', 'zip'])
output:
    html = 'results/{project}/fastqc/multiqc_report.html'
params:
    out = lambda wildcards, output: os.path.dirname(output['html'])
conda:
    'envs/multiqc.yaml'
shell:
    'multiqc --force -o {params.out} {params.out}'

其中multiqc.yaml 是安装了multiqcconda 环境的规范。

当我使用例如snakemake --profile profiles/local/ 在本地执行管道时,一切都按预期工作。当我使用tibannasnakemake --profile profiles/aws/在云上执行代码时也是如此。到目前为止,一切顺利。

上述规则非常轻量级,在本地执行它是有意义的,所以我在Snakefile 的某处有声明localrules: all, multiqc,这就是问题开始的地方。在这种情况下,当我在云中执行代码时,似乎multiqc.yaml 中定义的conda 环境没有自动安装或激活,我收到command 'multiqc' not found 错误。我目前用来绕过这个问题的hack是在本地安装multiqc,但是这个解决方案很丑陋,它影响了管道的可移植性。我怀疑我可以通过使用安装了multiqcsingularity 图像来解决这个问题,但最优雅的解决方案仍然是以某种方式使规则的conda: 'envs/multiqc.yaml' 部分起作用。

上述行为是预期的还是错误(在我的代码或snakemake 中)?解决此问题的最佳解决方案是什么(可能使用singularity 图像)?

非常感谢。

【问题讨论】:

    标签: conda snakemake


    【解决方案1】:

    一些想法:

    • 要激活 conda 环境,您需要在 snakemake 中添加选项 --use-conda,即snakemake --use-conda ...

    • 你真的需要在自己的 conda 环境中执行 multiqc 吗?如果您可以在本地安装和运行 multiqc 而不会与其他 snakemake 规则发生冲突,我怀疑您不需要专门的环境。

    • 如果以上所有方法都失败了,我宁愿将 multiqc 作为集群的作业而不是作为本地规则运行,以避免您提到的复杂解决方案。

    【讨论】:

    • 嗨达里奥,1) 是的,我使用--use-conda 标志。这就是为什么我观察到的行为很奇怪。 2) 我认为为每条规则提供一个专用的conda 环境以提高可移植性会很好,但我同意像我现在所做的那样在本地安装multiqc 是一个可以接受的解决方案。 3) 是的,这个解决方案简单且可移植(conda 在这种情况下有效)。缺点是成本相对较高:在云上初始化实例比实际工作需要更多时间(这就是存在localrules: ... 的原因)。非常感谢您的宝贵时间和体贴的 cmets!
    猜你喜欢
    • 1970-01-01
    • 2019-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-08
    相关资源
    最近更新 更多