首页 > 解决方案 > Snakemake conda env 参数不是取自 config.yaml 文件

问题描述

我使用手动创建的 conda env,而不是使用 Snakemake 自动创建。我这样做是为了保持更严格的版本控制。

无论如何,在我的 config.yaml 我有以下行:

conda_env: '/rst1/2017-0205_illuminaseq/scratch/swo-406/snakemake'

然后,在我的 Snakefile 开始时,我读取了该变量(从 shell 部分的配置中读取变量似乎不起作用,对吗?):

conda_env = config['conda_env']

然后在外壳部分,我欢呼说这样的参数:

rule rsem_quantify:
    input:
        os.path.join(fastq_dir, '{sample}_R1_001.fastq.gz'),
        os.path.join(fastq_dir, '{sample}_R2_001.fastq.gz')
    output:
        os.path.join(analyzed_dir, '{sample}.genes.results'),
        os.path.join(analyzed_dir, '{sample}.STAR.genome.bam')
    threads: 8
    shell:
        '''
        #!/bin/bash
        source activate {conda_env}

        rsem-calculate-expression \
        --paired-end \
        {input} \
        {rsem_ref_base} \
        {analyzed_dir}/{wildcards.sample} \
        --strandedness reverse \
        --num-threads {threads} \
        --star \
        --star-gzipped-read-file \
        --star-output-genome-bam
        '''

注意{conda_env}. 现在这给了我以下错误:

Could not find conda environment: None
You can list all discoverable environments with `conda info --envs`.

现在,如果我直接更改{conda_env}它的参数/rst1/2017-0205_illuminaseq/scratch/swo-406/snakemake,它确实有效!使用此方法读取其他参数时我没有任何问题(例如上面rsem_ref_baseanalyzed_dir示例规则。

这里有什么问题?

致以最崇高的敬意,

弗里克。

标签: bioinformaticscondasnakemake

解决方案


我使用的模式是将变量加载到params中,因此类似于

rule rsem_quantify:
    input:
        os.path.join(fastq_dir, '{sample}_R1_001.fastq.gz'),
        os.path.join(fastq_dir, '{sample}_R2_001.fastq.gz')
    output:
        os.path.join(analyzed_dir, '{sample}.genes.results'),
        os.path.join(analyzed_dir, '{sample}.STAR.genome.bam')
    params:
        conda_env=config['conda_env']
    threads: 8
    shell:
        '''
        #!/bin/bash
        source activate {params.conda_env}

        rsem-calculate-expression \

        ...

        '''

虽然,我也永远不会在 conda 环境中这样做,因为 Snakemake 内置了 conda 环境管理。有关详细信息,请参阅集成包管理文档中的此部分。这使得再现性更易于管理。


推荐阅读