使用脚本参数在 Snakemake 中指定 Python 版本
Specifying Python version within Snakemake using script parameter
我有一些代码要合并到 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 中 运行管道?
您可以使用 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
,例如,
shell
snakemake --use-conda output_file
我有一些代码要合并到 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 中 运行管道?
您可以使用 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
,例如,
shell
snakemake --use-conda output_file