簡體   English   中英

Snakemake - 如何設置 conda 環境路徑

[英]Snakemake - How to set conda environment path

在 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

我可以定位或預定義STAR aligner 軟件的目錄(例如[workdir]/.snakemake/conda/STAR ),該軟件是通過 conda 在之前的規則中安裝的嗎?

目前,一種選擇可能是使用命令行界面選項創建一個共享環境文件夾: --conda-prefix Snakemake docs - 命令行界面,但是由於這是一個單一案例問題,我更願意定義規則中的此信息。

我有兩種方法來處理這個問題。

1:讓 Conda 處理 PATH

當 STAR 不在 PATH 上時才需要指定該特定選項( --star-path )。 但是,如果此規則的 YAML 中包含 STAR,則 Conda 會將其放在 PATH 作為環境激活的一部分,因此不需要該選項。 --bowtie-path也是如此。 因此,對於這樣的規則,YAML 可能類似於:

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

根據此線程,請考慮將軟件包上的版本固定為次要版本(例如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
        """

實際上,您的管道假定的任何內容都已經存在並且不是由管道本身生成的,應該將 go 放入您的config.yaml (例如mm9.gtfmm9.bigWig )中。


共享環境注意事項

一般來說,我建議不要嘗試共享環境。 但是,您仍然可以通過在用戶之間共享package 緩存並確保在同一文件系統上創建環境來節省空間(這使 Conda 可以使用硬鏈接而不是復制)。 您可以使用 Conda 配置選項pkgs_dirs來設置 package 緩存位置。 如果管道本身已經與 Conda package 緩存在同一個文件系統上,我會讓 Snakemake 使用默認位置( .snakemake/conda )而不是與--conda-prefix參數混淆。

否則,您可以為 Snakemake 提供--conda-prefix參數以指向同一文件系統上的目錄,在該目錄中創建 Conda 環境。 這應該是一個相當通用的目錄,管道的所有環境都位於其中。 OP ( [workdir]/.snakemake/conda/STAR ) 中提出的內容沒有意義。

我想為@merv 的答案添加第三個選項。 您可以使用which動態計算路徑(假設它在您的系統上啟用):

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM