首页 > 解决方案 > Snakemake - 如何设置 conda 环境路径

问题描述

在 Snakemake 中,可以通过定义规则来轻松设置 conda 环境conda: "envs/my_environment.yaml"。这样,YAML 文件指定在运行管道之前要安装哪些包。

某些软件需要第三方软件的路径才能执行特定命令。

这方面的一个示例是使用 RSEM 生成参考索引时(来自 GitHub 页面DeweyLab - RSEM的示例):

rsem-prepare-reference --gtf mm9.gtf \
                       --star \
                       --star-path /sw/STAR \
                       -p 8 \
                       --prep-pRSEM \
                       --bowtie-path /sw/bowtie \
                       --mappability-bigwig-file /data/mm9.bigWig \
                       /data/mm9 \
                       /ref/mouse_0

我可以找到或预定义通过 conda 在先前规则中安装的 aligner 软件的目录(例如[workdir]/.snakemake/conda/STAR)吗?STAR

目前,一个选项可能是使用命令行界面选项创建一个共享环境文件夹:--conda-prefixSnakemake docs - 命令行界面,但是由于这是一个单一案例问题,我更愿意在规则中定义此信息.

标签: pythoncondaenvironmentsnakemake

解决方案


我有两种方法来处理这个问题。

1:让 Conda 处理 PATH

仅当 STAR 不在 PATH 上时,--star-path才需要指定该特定选项 ( ) 。但是,如果此规则的 YAML 中包含 STAR,则 Conda 会将其放在 PATH 作为环境激活的一部分,因此不需要该选项。也一样。因此,对于这样的规则,YAML 可能类似于:--bowtie-path

name: rsem
channels:
  - conda-forge
  - bioconda
  - defaults
dependencies:
  - rsem
  - star
  - bowtie

根据这个线程,考虑将包上的版本修复为次要版本(例如,bowtie=1.3)。

2:config.yaml用于管道选项

如果由于某种原因您不想要一个完全独立的管道,例如,您的系统已经预装了许多标准基因组学软件,如 STAR,那么您可以config.yaml在用户应根据他们的系统调整管道的地方添加一个条目。例如,以下是相关部分:

配置.yaml

star_path: /sw/STAR
bowtie_path: /sw/bowtie

蛇文件

configfile: config.yaml

## this is not a complete rule
rule rsem_prep_ref:
    # needs input, output...
    params:
        star=config['star_path'],
        bowtie=config['bowtie_path']
    threads: 8
    conda: "envs/myenv.yaml"
    shell:
        """
        rsem-prepare-reference --gtf mm9.gtf \
          --star \
          --star-path {params.star} \
          -p {threads} \
          --prep-pRSEM \
          --bowtie-path {params.bowtie} \
          --mappability-bigwig-file /data/mm9.bigWig \
          /data/mm9 \
          /ref/mouse_0
        """

实际上,您的管道假设已经存在并且不是由管道本身生成的任何内容都应该进入您的config.yaml(例如,mm9.gtfmm9.bigWig)。


共享环境注意事项

一般来说,我建议不要尝试共享环境。但是,您仍然可以通过在用户之间共享包缓存并确保在同一文件系统上创建环境来节省空间(这使 Conda 可以使用硬链接而不是复制)。您可以使用 Conda 配置选项pkgs_dirs来设置包缓存位置。如果管道本身已经与 Conda 包缓存在同一个文件系统上,我会让 Snakemake 使用默认位置 ( .snakemake/conda) 而不会弄乱--conda-prefix参数。

否则,您可以给 Snakemake--conda-prefix参数以指向同一文件系统上的目录,在该目录中创建 Conda 环境。这应该是一个相当通用的目录,管道的所有环境都位于其中。OP ( [workdir]/.snakemake/conda/STAR) 中提出的内容没有意义。


推荐阅读