python中的动态make

dynamake的Python项目详细描述


为什么

< Buff行情>

"世界需要的是另一个构建工具"

-太多人了

那么,为什么还要另一个呢?

迪纳马克的葡萄干是:

  • 动态构建图的一流支持。
  • 细粒度配置控制。
  • python实现。

创建dynamake是为了满足在 科学计算管道的上下文,但应适用于更广泛的问题领域。

动态构建图

这是一种奇特的说法,即支持以下内容:

动态输入 :构建步骤的完整输入集可能取决于其输入的子集。

动态输入的一个例子是编译一个c源文件,它实际上依赖于 包括头文件。对于更复杂的示例,请考虑数据分析,其中输入数据是 分为几个类别中的一个。实际分析结果由 类别特定算法,为最终合并步骤生成不同的输入文件。

大多数构建工具以各种方式支持动态输入—其中一些方式 比其他人复杂。dynamake为此类情况提供一流的自然支持。

动态输出 :生成步骤的输出集可能取决于其输入。

动态输出的一个例子是对一些大数据运行一个聚类步骤,这可能会产生 群集数。这些集群中的每一个都需要进行一些进一步的处理。也许只有 其中一些集群需要处理(基于一些昂贵的计算过滤器)。

动态输出在科学计算管道中非常常见,它们是 疼痛的根源。当然,也有解决办法。但几乎没有一个现有的工具可以直接支持 他们,以及为数不多的工具,大多数都是事后诸葛亮。因为这个问题涉及面很广 对构建工具的影响,这意味着它们通常做得不好。一个明显的例外是 震动 ,dynamake的灵感来源于此。

动态输出(以及在较小程度上的动态输入)的问题是它们使其他 构建工具特性很难实现。因此,将它们改造成现有的建筑 工具会导致某些功能中断。在最坏的情况下,这会导致无声的损坏版本。

一些在动态构建图中变得非常困难的功能示例如下:

  • 当一个构建根本不需要做任何事情时,积极地优化案例的能力,以及 一般来说,减少构建系统的开销。
  • 能够执行精确列出所有步骤的干运行 建立任意目标。
  • 拥有一种纯声明性的构建语言,它比任何编程都更容易学习 语言(甚至是python:-),可以通过其他工具作为纯数据处理。

配置控制

这是一种奇特的说法,你可以调整一个复杂的任意步骤的参数 管道,然后只执行管道的受影响部分,或者一直执行到最终 或者只是为了得到一些中间结果来检验。这个用例在 科学计算管道。

可以将配置参数指定为显式命令行选项以执行 操作,或在配置文件中。如果命令 行选项已更改。所有构建工具都允许添加配置文件作为依赖项; 但是,这需要设置每次调用的配置文件,这可能会变得非常笨拙 对于一个大型的管道-特别是当需要用不同的 配置取决于确切的文件(例如,不同源的不同编译标志 文件)

dynamake基于单个中心自动生成每次调用的配置文件 配置文件,以便在修改时,仅调用受影响的操作。此外, dynamake跟踪输入、输出、操作及其命令行选项的列表,以便 管道本身的更改将触发调用受影响的操作。

此功能需要在调用之间保持额外的持久状态。这个州是 作为人类可读(yaml)文件存储在一个特殊目录中(默认情况下, .dynamake ,但您可以 使用环境变量覆盖它。文件名很清楚 (基于步骤名及其参数,如果有的话),因此在 准确了解在哪里使用了哪些参数值。

在极少数情况下,有充分的理由避免任何此类额外的持久状态。发电机允许 禁用这些功能,切换到仅依赖输入文件的修改时间。 这当然会导致不太可靠的重建。

巨蟒

dynamake最初是为了满足科学计算管道自动化的需要而创建的。 (特别是在生物信息学中,特别是在单细胞rna测序中,这并不重要)。 但是,它是一个通用的构建工具,可能对广大用户有用。

dynamake的灵感来自于震动。然而, 摇动 在haskell中实现。Haskell不太可能预先安装在 典型的机器,安装它(和shake)绝非小事,特别是当没有 sudo 特权。另外,编写 shake 规则使用haskell语法,虽然它很简单而且 有时高级,与大多数流行的编程语言有很大不同。

相反,python更可能已经安装在典型的机器上。这是微不足道的 只需键入 pip install --user dynamake (或 sudo pip install dynamake 如果您有 sudo 特权)。构建规则是简单的python脚本,这意味着大多数人已经熟悉 或由于其他原因正在变得如此。

使用一种经过验证和熟悉的语言也比提出一个全新的面向构建的语言更好 语言,尤指在创建通用生成工具时。gnu make 语法是 警告:这种专门语言不可避免地会演变成一种通用的混乱。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java为什么需要ScheduledExecutorService。shutdown()使用我100%的CPU吗?   java如何加载应用程序。spring框架中的属性?   java立即绘制JFrame   java定时器不允许用户进行编辑   java如何通过在React应用程序中提交值来加载数据   java在Multimultiul maven项目中集成特性(文件)存储在哪里?   java Arjuna JTA事务意外回滚   java禁用edittext 安卓,在视图中使用if-else   java中的错误。图书馆从Matlab调用使用Cplex的Java函数时的路径   Java中的浮点计算错误   Java中C#IEnumerable的等价物是什么?是可协变的,不是可协变的   最终播放商店用户可见的java Apk名称