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

Python Distutils-SIG: 任务和分工

Python Distutils-SIG

任务和分工

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

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

开发者任务

开发者的主要任务是

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

打包者任务

创建已构建的分发包
实际上是打包者存在的唯一原因:这包括下载源代码分发包,构建模块,并根据构建结果创建新的可下载资源
除了构建软件,打包者在创建已构建分发包之前还应该测试它。

安装者任务

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