一个公共天文Python包的设想

下面的文档总结了一个常见的天文学Python包的远景,以及我们如何最好地协同工作来实现这一目标。在下面的文档中,这个公共包被称为核心包。这一愿景并非一成不变的,我们致力于使之适应实践中的任何过程和指导方针。

我们寻求的最终目标是一个包,包含天文学所需的大部分核心功能和一些通用工具,但不是 一切 天文学家将永远需要。其目的主要是为了避免共同核心任务的重复,并提供一个健壮的框架来构建更复杂的工具。

这种共同的一揽子计划不应排除现有的任何其他天文学一揽子计划,因为总会需要更复杂和/或专门的工具。这些工具将能够依赖于单个核心库来完成许多任务,从而减少了依赖项的数量,减少了功能的重复,并提高了它们接口的一致性。

程序

在社区的帮助下,协调委员会将首先确定需要初步开发/整合的几个关键领域(如FITS、WCS、坐标、表格、光度测定、光谱等),并鼓励组建团队,以构建实现此功能的独立软件包。这些包将被称为附属包(这意味着它们将用于将来在核心包中集成)。

为了确保不同组件之间的一致性,将制定一套关于接口和类/方法的要求,附属包需要提供这些接口和类/方法。随着核心包的增长,核心包的新的潜在领域/组件将被确定。竞争是无法避免的,也不会积极劝阻,但只要有可能,开发人员应该努力作为一个团队,提供一个单一和强大的附属包,为社区的利益。

附属软件包将在核心包之外的独立存储库中开发,这将允许团队选择工具和组织。一旦附属软件包实现了所需的功能,并满足编码风格、文档和测试的质量标准,则将考虑将其包含在核心包中,并通过直接访问存储库直接在核心包中进行进一步的开发,或者通过补丁/拉请求(具体如何实现将在稍后决定)。

为了确保关联包之间的一致性,并促进与核心包的集成,希望提交附属包以包含在核心包中的开发人员需要遵循开发开始前提供的“模板”包的布局。

依赖关系

关联的软件包应该只能通过以下依赖项导入:

  • Python标准库NumPy、SciPy和Matplotlib组件已经包含在核心天文软件包中

可以使用其他包,但必须根据需要导入,而不是在初始导入包时导入。

如果需要将依赖包集成到依赖包中,则需要等待包本身被包含到依赖项中。同时,它还可以利用现有形式的其他附属包或其他包,以免耽误开发。因此,核心中包含的第一个包将是那些只需要标准库、NumPy、SciPy和Matplotlib的包。

如果所需的依赖项永远不会是主包的一部分,则默认情况下可以包含该依赖项,但应根据需要导入该依赖项(这意味着它只阻止导入该组件,而不是整个核心包),除非有一个强有力的理由,并且社区达成了一个普遍共识,即这种依赖性足够重要,可以在更高的层次上被要求。

这个系统意味着软件包将按照依赖树的顺序集成到核心包中,同时也保证了集成到核心包中的包的接口与核心包中已有的接口一致。

最初,在核心包中不允许依赖GUI工具包。如果社区就可以使用的单个工具箱达成协议,则允许使用此工具箱(但仅在需要时导入)。

跟踪关联包

另外,所有的安装包都可以在一个附带的安装包中无缝地安装。核心软件包还将包括促进这一安装过程的机制。

现有软件包

为了用户的利益,已经拥有现有软件包的开发人员将被鼓励继续支持它们,直到核心库被认为是稳定的,包含了这个功能,并发布给社区。此后,开发人员应该鼓励用户过渡到使用核心包中的功能,并最终逐步淘汰他们自己的包,除非他们提供了超过核心包的附加值。