【问题标题】:Specifying Python version within Snakemake using script parameter使用脚本参数在 Snakemake 中指定 Python 版本
【发布时间】:2019-04-30 14:59:38
【问题描述】:

我有一些代码要合并到 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 管道中运行?

【问题讨论】:

  • 虽然我对您的任务了解的不够详细,但是让runfile.py 独立于配置文件的来源不是更好吗?添加以文件为输入的命令行选项或为各个参数添加命令行选项。我认为通过这种方式可以使runfile.py 更加独立、便携且更易于测试。

标签: python snakemake


【解决方案1】:

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

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

envs/py37.yml

channels:
  - defaults
dependencies:
  - python=3.7

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

蛇文件

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

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

外壳

snakemake --use-conda output_file

【讨论】:

    猜你喜欢
    • 2018-02-08
    • 2012-08-07
    • 2019-04-18
    • 1970-01-01
    • 1970-01-01
    • 2014-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多