对于声明为本地的规则,snakemake中未激活Conda环境

时间:2020-10-31 18:48:31

标签: conda snakemake

我在Snakemake v5.26.1上有问题,我不确定这是bug还是做错了事。

我有以下规则:

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是安装了conda的{​​{1}}环境的规范。

例如,当我使用multiqc在本地执行管道时,一切都会按预期进行。当我使用snakemake --profile profiles/local/tibanna在云上执行代码时,情况也是如此。到目前为止,一切都很好。

以上规则非常轻巧,在本地执行它很有意义,因此我在snakemake --profile profiles/aws/的某处有声明localrules: all, multiqc,这就是问题开始的地方。在这种情况下,当我在云中执行代码时,似乎Snakefile中定义的conda环境没有自动安装或激活,并且出现了multiqc.yaml错误。我目前用来绕过此问题的技巧是在本地安装command 'multiqc' not found,但此解决方案很难看,并且会影响管道的可移植性。我怀疑我可以通过使用安装了multiqc的{​​{1}}映像来解决问题,但是最优雅的解决方案还是以某种方式使singularity成为规则的一部分。

上述行为是预期的还是错误(在我的代码或multiqc中)?解决此问题的最佳解决方案是什么(也许使用conda: 'envs/multiqc.yaml'图像)?

非常感谢。

1 个答案:

答案 0 :(得分:1)

一些想法:

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

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

  • 如果上述所有方法均失败,我宁愿将multiqc作为群集的一项工作而不是作为本地规则来运行,以避免出现您提到的复杂解决方案。