使用脚本参数在Snakemake中指定Python版本
我有一些代码,我正在合并到Snakemake管道中。我还希望能够独立于Snakemake运行代码,因此我希望编写灵活的代码。我有一个可以被Snakemake读取的配置文件,还有一个替代配置文件,如果代码在Snakemake之外运行,它将被解析 我的Snakemake文件中的规则具有以下结构:使用脚本参数在Snakemake中指定Python版本,python,snakemake,Python,Snakemake,我有一些代码,我正在合并到Snakemake管道中。我还希望能够独立于Snakemake运行代码,因此我希望编写灵活的代码。我有一个可以被Snakemake读取的配置文件,还有一个替代配置文件,如果代码在Snakemake之外运行,它将被解析 我的Snakemake文件中的规则具有以下结构: rule some_rule: input: input_file output: output_file script: runfi
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
rule some_rule:
input:
input_file
output:
output_file
shell:
/path/to/python runfile.py
这很好,只是我在虚拟环境中工作,我想要使用的Python版本与Snakemake默认使用的版本不同。
因此,我不得不对规则进行如下重组:
if 'snakemake' in globals():
# Get config params from Snakemake
else:
# Load config params from alternative config file
rule some_rule:
input:
input_file
output:
output_file
shell:
/path/to/python runfile.py
但是现在因为我使用的是shell
而不是script
,所以我无法访问python文件中的global
参数'snakemake'
所以我的问题是
(i) 我是否可以指定一个Python版本并仍然使用脚本
或
(ii)我是否可以使用
shell
,但仍然可以访问脚本中的“snakemake”对象,这将允许我测试脚本是否正在snakemake管道中运行?您可以使用Conda-它将提供对执行上下文的细粒度控制,并提高管道的可再现性。看
首先,您需要一个环境定义YAML文件。比如说,
envs/py37.yml
channels:
- defaults
dependencies:
- python=3.7
snakemake --use-conda output_file
在该文件中添加您需要的任何其他需求。那么你的规则就是
蛇形文件
rule some_rule:
input:
input_file
output:
output_file
conda:
envs/py37.yml
script:
runfile.py
最后,您现在需要在启动此作业时使用附加标志--使用conda
,例如
壳牌公司
channels:
- defaults
dependencies:
- python=3.7
snakemake --use-conda output_file
假设我对您的任务了解得不够详细,那么让
runfile.py
独立于配置文件的来源不是更好吗?添加以文件作为输入的命令行选项,或为各个参数添加命令行选项。我认为这样可以使runfile.py
更加独立、可移植和易于测试。