使用脚本参数

时间:2019-04-30 14:59:39

标签: python snakemake

我有一些代码要合并到Snakemake管道中。我还希望能够独立于Snakemake运行代码,因此我想编写灵活的代码。我有一个可供Snakemake读取的配置文件,以及一个备用配置文件,如果代码在Snakemake外部运行,它将被解析。

我的Snakemake文件中的规则中具有以下结构:

rule some_rule:
    input:
        input_file
    output:
        output_file
    script:
        runfile.py

然后在runfile.py中,我测试了该脚本是否正在Snakemake中运行,如下所示:

if 'snakemake' in globals():
    # Get config params from Snakemake
else:
    # Load config params from alternative config file 

这很好,除了我在虚拟环境中工作并且我要使用的Python版本与Snakemake默认使用的版本不同。 因此,我不得不按如下方式重组规则:

rule some_rule:
    input:
        input_file
    output:
        output_file
    shell:
        /path/to/python runfile.py

但是现在,因为我使用的是shell而不是script,所以我无权访问我的python文件中的global参数'snakemake'。

所以我的问题是

(i)我可以指定Python版本并且仍然使用script吗?

(ii)我是否可以使用shell但仍访问脚本中的'snakemake'对象,这将允许我测试脚本是否在Snakemake管道中运行?

1 个答案:

答案 0 :(得分:1)

您可以使用Conda-它既可以提供对执行上下文的细粒度控制,又可以提高管道的可重复性。参见Documentation

首先,您需要一个环境定义YAML文件。例如,

envs / py37.yml

channels:
  - defaults
dependencies:
  - python=3.7

在该文件中添加您需要的任何其他要求。那你的规则就是

Snakefile

rule some_rule:
    input:
        input_file
    output:
        output_file
    conda:
        envs/py37.yml
    script:
        runfile.py

最后,您现在需要在启动此作业时使用附加标志--use-conda,例如

外壳

snakemake --use-conda output_file