【问题标题】:Snakemake - How to set conda environment pathSnakemake - 如何设置 conda 环境路径
【发布时间】:2020-12-14 13:47:58
【问题描述】:

在 Snakemake 中,可以通过定义 conda: "envs/my_environment.yaml" 等规则轻松设置 conda 环境。这样,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

我能否定位或预定义STAR aligner 软件的目录(例如[workdir]/.snakemake/conda/STAR),该软件是通过 conda 在先前规则中安装的?

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

【问题讨论】:

    标签: python conda environment snakemake


    【解决方案1】:

    我有两种处理方法。

    1:让 Conda 处理 PATH

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

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

    As per this thread,考虑将软件包上的版本修复为次要版本(例如,bowtie=1.3)。

    2:将config.yaml 用于管道选项

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

    config.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) 中提出的建议没有意义。

    【讨论】:

    【解决方案2】:

    我想在@merv 的回答中添加第三个选项。您可以使用which 来动态找出路径(假设它已在您的系统上启用):

    rsem-prepare-reference --star-path $(which star) ...
    

    【讨论】:

    • 如果它已经在 PATH 上,可以完全省略该参数。
    • @merv 是的,但有人可能会发现这个问题是针对与 rsem 不同的工具,所以我认为以不同的方式记录可能会很好。
    猜你喜欢
    • 1970-01-01
    • 2020-11-15
    • 1970-01-01
    • 2019-06-07
    • 2016-07-13
    • 2021-12-27
    • 1970-01-01
    • 1970-01-01
    • 2018-01-04
    相关资源
    最近更新 更多