更新中间文件时防止规则重新运行
Prevent rules from rerunning when intermediate file is updated
假设我的 snakemake 文件中有两个规则
- 第一条规则获取远程文件并制作一个临时本地副本
- 第二个规则使用本地文件并执行昂贵的任务
现在假设我 运行 这条管道要完成,我想添加第三条规则并重新 运行 管道。
- 第三条规则使用相同的本地文件并执行不同的任务
有什么方法可以 运行 这个更新的管道而不需要重新 运行 规则 #2?问题是,当我尝试完成规则 #3 时,规则 #1 被触发,然后规则 #2 想要重新 运行 因为中间本地文件已更新。
我知道存在使用 touch
或 ancient
等技术,但我不确定它们如何或是否可以在这里应用。有没有办法将规则 #1 专门标记为 not 进行更新?
在 ancient
中包装规则 2 和 3 的输入文件应该可以防止它们对文件更新做出反应。像这样:
rule a:
output: 'a.txt'
shell: 'curl some_url > {output}'
rule b:
input: ancient('a.txt')
# do something
rule c:
input: ancient('a.txt')
# do something
假设我的 snakemake 文件中有两个规则
- 第一条规则获取远程文件并制作一个临时本地副本
- 第二个规则使用本地文件并执行昂贵的任务
现在假设我 运行 这条管道要完成,我想添加第三条规则并重新 运行 管道。
- 第三条规则使用相同的本地文件并执行不同的任务
有什么方法可以 运行 这个更新的管道而不需要重新 运行 规则 #2?问题是,当我尝试完成规则 #3 时,规则 #1 被触发,然后规则 #2 想要重新 运行 因为中间本地文件已更新。
我知道存在使用 touch
或 ancient
等技术,但我不确定它们如何或是否可以在这里应用。有没有办法将规则 #1 专门标记为 not 进行更新?
在 ancient
中包装规则 2 和 3 的输入文件应该可以防止它们对文件更新做出反应。像这样:
rule a:
output: 'a.txt'
shell: 'curl some_url > {output}'
rule b:
input: ancient('a.txt')
# do something
rule c:
input: ancient('a.txt')
# do something