注意: 虽然 JavaScript 对于本网站不是必需的,但您与内容的互动将受到限制。请启用 JavaScript 以获得完整体验。

Python Distutils-SIG:任务和分工

Python Distutils-SIG

任务和分工

在第七届国际 Python 会议开发者日会议 “扩展构建被认为很痛苦” 上,我们列举了开发、分发和安装 Python 模块所需的任务;就概念化任何分发/安装系统所需的分工达成了大致共识;并提出了一个建议的用户界面。本文档描述了任务和分工;建议的用户界面在其他地方描述。

确定了三个角色:开发者、打包者和安装者(从某种意义上说,是系统的最终用户;我将坚持使用“安装者”,因为他不是唯一的用户)。显然,这些角色存在重叠;有些任务必须由开发者和打包者共同完成,有些任务必须由三者共同完成等。我将尝试将每个任务与一个“主要”角色关联起来,并在其他角色也出现时再次提及。

开发者任务

开发者的主要任务是

开发
编写和维护模块
文档
编写模块文档(请注意,以标准方式记录 Python 模块的问题不在 Distutils-SIG 的权限范围内;但是,如果出现这种标准方式,我们应该尽力支持它,例如提供与标准文档处理工具的简单接口)
提供测试套件
编写测试(理论上)模块每个部分的代码,并以标准方式报告成功或失败(distutils 的作用是提供一个标准接口来运行测试套件并解释其结果)
提供安装工具
目前耗时、容易出错,而且非常繁琐(并且开发者之间的做法不一致):Distutils-SIG 存在要解决的问题!distutils 应该是那个安装工具;开发者通常只需要提供一些信息来帮助 distutils 完成它们的工作
创建源分发
不仅仅是 tar 打包源代码树的一个子集,但是——考虑到 distutils 将拥有诸如名称、版本号等信息——在它的帮助下可以变得微不足道
开发者在开发过程中还必须反复构建软件,这意味着构建的接口必须面向安装者(可能是天真的最终用户)和开发者。(这赞成使用两个构建接口。)创建源分发可以被认为是打包者的任务,但它几乎总是由开发者戴上他的“打包者”帽子来完成;另一方面,开发者可能会再次戴上这顶帽子,为他喜欢的平台创建一个构建分发,但我将其归类在下面的打包者任务下。

打包者任务

创建构建分发
确实是打包者存在的唯一原因:这包括下载源分发,构建模块,并从构建结果创建一个新的可下载资源
除了构建软件外,打包者可能还应该在创建构建分发之前对其进行测试。

安装者任务

构建
将源文件转换为准备安装的形式。这最终可能涉及以下内容
  • .py 文件复制到模拟安装树中
  • .py 文件编译为 .pyc.pyo 形式
  • 编译并链接 C 扩展,将共享对象放入模拟安装树中
  • 处理文档(例如,为 Unix 手册页创建 *roff 文件,为 GNU info 系统创建 info 文件,以及/或者为方便 Web 使用的文档创建 HTML 文件)
测试
运行开发者提供的测试套件,并确保模块通过所有测试
安装
将模拟安装树复制到现有的 Python 库树中(不一定是系统 Python 库——可以在用户的 home 目录或临时目录中)
请注意,这些假设安装者正在使用源分发——如果总是这样,那么打包者就浪费了他的时间,我们不希望这样。安装构建分发应该很简单,但是有一些未解决的问题:我们如何处理“智能”和“哑”构建分发之间的差异(例如 RPM 或 Wise Installer 与简单的 .tar.zip 文件)?安装构建分发时是否应该运行测试套件,如果应该,如何运行?