如何在纯Python中构建Snakemake 8.18.2工作流?
Snakemake 8.18.2 纯Python工作流实现方案
核心思路
Snakemake 8.x 重构了内部API,旧版本直接动态修改rules列表的方式已被移除,现在需通过官方提供的Workflow类构建和执行工作流,确保兼容性。
具体实现步骤
1. 基础导入与工作流初始化
导入Workflow类并初始化工作流实例,可指定工作目录等参数:
from snakemake.workflow import Workflow # 初始化工作流,指定工作目录(可选,默认当前目录) workflow = Workflow(workdir="./")
2. 定义普通规则
使用workflow.rule()方法添加规则,替代旧的动态创建方式。示例定义一个生成文本文件的规则:
# 定义生成文件的规则 workflow.rule( name="generate_file", output="output.txt", shell="echo 'Hello Snakemake' > {output}" )
3. 正确定义'all'规则
断言错误通常源于all规则的依赖定义不符合新版本要求,需通过input明确指定要聚合的目标文件:
# 定义all规则作为总目标 workflow.rule( name="all", input="output.txt" )
4. 执行工作流
通过workflow.execute()方法启动工作流,可指定目标规则(默认执行all):
# 执行工作流,默认运行all规则 workflow.execute(targets=["all"])
完整示例代码
from snakemake.workflow import Workflow # 初始化工作流 workflow = Workflow(workdir="./") # 定义生成文件的规则 workflow.rule( name="generate_file", output="output.txt", shell="echo 'Hello Snakemake' > {output}" ) # 定义总目标规则 workflow.rule( name="all", input="output.txt" ) # 执行工作流 workflow.execute(targets=["all"])
关键注意事项
- 所有规则必须通过
workflow.rule()添加,禁止直接操作内部规则列表 all规则的input必须明确指向其他规则的输出文件,不能留空或使用旧语法- 若需用Python脚本处理任务,可在
rule方法中指定run参数:
workflow.rule( name="generate_py", output="python_output.txt", run=""" with open(output[0], 'w') as f: f.write('Generated via Python') """ )
内容的提问来源于stack exchange,提问作者Harry Matthews
相关产品推荐
相关产品推荐

