我使用手动创建的conda env,而不是使用Snakemake自动创建。我这样做是为了保持更严格的版本控制。
无论如何,在我的config.yaml中,有以下一行:
conda_env: '/rst1/2017-0205_illuminaseq/scratch/swo-406/snakemake'
然后,在我的Snakefile的开头,我读到了该变量(从shell部分的config中读取变量似乎不起作用,对吗?):
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_base
和analyzed_dir
。
这有什么问题吗?
最诚挚的问候
Freek。
答案 0 :(得分:2)
我使用的模式是将变量加载到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环境管理功能。有关详情,请参见this section in the docs on Integrated Package Management。这使得重现性更加易于管理。