You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在纯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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 12:09:56