我有一个DAG程序,它可以处理和清理某些文件,组合它们,然后进行额外的计算。我希望有一种方法可以运行整个分析管道,如果有任何变化,可以重新运行,但不必重新处理每个组件。
我读过Makefiles,认为它听起来像是完美的解决方案。我也意识到它可能已经过时了,可能存在更好的替代品,但我通常只找到大量的工作流调度工具,不太适合这个目的,据我所知(例如,Airflow,Luigi,Nextflow,Dagobah等)。
看起来这些文件中的许多都是多余的,我并不真正需要的插件,GUI等。我只想要一个文件,它可以执行以下操作:
- 使所有需要运行的python脚本变得显而易见
- 显示文件依赖关系,以便完全重新运行将只重做上游已更改的部分
- 有可能进行一些并行化(不是非常必要)
- 没有太多的样板文件
Makefile示例:
.PHONY : dats
dats : isles.dat abyss.dat
isles.dat : books/isles.txt
python countwords.py books/isles.txt isles.dat
abyss.dat : books/abyss.txt
python countwords.py books/abyss.txt abyss.dat
.PHONY : clean
clean :
rm -f *.dat
字符串
这是在python中运行类似程序的最佳过程吗?或者有更好的方法吗?
4条答案
按热度按时间bttbmeg01#
DVC(数据版本控制)包括
make
的现代重新实现和扩展,特别适合数据科学管道(参见here)。在许多情况下,在DVC中处理管道比
make
有重要的好处,例如依赖于文件校验和而不是修改时间。相反,make
在某种意义上更简单,并且具有强大的宏机制。尽管如此,makefiles的语法中仍有一些元素非常微妙(例如,多个输出,中间文件),并且make
通常不支持文件名中的空格。kdfy810k2#
这是在python中运行类似程序的最佳过程吗?或者有更好的方法吗?
“最好”当然是在旁观者的眼中。然而,如果问题中提出的基于
make
的方法令人满意地代表了问题,那么它就是一个好方法。make
实现非常广泛,它们的行为被很好地理解,并且通常非常适合于所提出的问题。还有其他一些构建工具可以与
make
竞争,其中一些是用Python编写的,毫无疑问,还有一些更深奥的软件框架可以应用于该任务。然而,如果您想专注于完成工作,而不是构建框架来完成工作,那么我认为没有任何理由忽略您已经拥有的基于make
的解决方案。p4rjhz4m3#
你提出这个问题的方式,我会说snakemake是要走的路。话虽如此,GNU make可能是老的,但不会很快消失,它已经被测试和尝试死亡。
我不会说
make
,但我认为你的snakemake
中的Makefile示例应该是这样的:字符串
将其保存到名为Snakefile的文件中,并执行它:
型
snakemake在生物信息学中很受欢迎,但它具有相当普遍的用途。
zaqlnxep4#
也许不是“最先进的”,但这里有两个相对轻量级的替代Python工具,符合OP的要求。
在这两种情况下,规则/任务配置都是在Python中完成的,这可能比Make专用的规则定义语法更受欢迎,并且在使用Python代码时增加了灵活性。另一方面,在简洁性方面很难击败Make的语法。
通过命令行对
python
进行编译以及下面示例的其他细节可能不适合这些工具,但实现应该接近OP的Makefile示例。Gird
字符串
doit
型