PEP 243 – 模块仓库上传机制
- 作者:
- Sean Reifschneider <jafo-pep at tummy.com>
- 讨论至:
- Distutils-SIG 邮件列表
- 状态:
- 已撤回
- 类型:
- 标准跟踪
- 主题:
- 打包
- 创建日期:
- 2001年3月18日
- Python 版本:
- 2.1
- 发布历史:
- 2001年3月20日,2001年3月24日
摘要
要使模块仓库系统(如 Perl 的 CPAN)取得成功,模块作者提交其作品必须尽可能简单。显然,提交可以在成功创建分发归档文件后,在 Distutils 工具中进行。例如,在模块作者测试其软件(验证 setup.py sdist 的结果)后,他们可能会键入 setup.py sdist --submit。这将标记 Distutils 将源分发提交到归档服务器,以便包含并分发到镜像。
本 PEP 仅处理将软件分发提交到归档的机制,而不涉及实际的归档/目录服务器。
上传过程
上传将包括 Distutils PKG-INFO 元数据信息(如 PEP 241 中所述)、实际的软件分发以及其他可选信息。此信息将以多部分表单编码上传,与常规 HTML 文件上传请求相同。此表单使用 ENCTYPE="multipart/form-data" 编码(RFC 1867)发布。
上传将发送到主机“www.python.org”的 80/tcp 端口(POST https://pythonlang.cn:80/pypi)。表单将包含以下字段:
distribution– 包含模块软件的文件(例如.tar.gz或.zip文件)。distmd5sum– 上传分发的 MD5 散列,以 ASCII 编码,表示摘要的十六进制表示(for byte in digest: s = s + ('%02x' % ord(byte)))。pkginfo(可选) – 包含分发元数据的文件(如 PEP 241 中所述)。请注意,如果未包含此项,则分发文件应为.tar格式(允许 gzipped 和 bzipped 压缩)或.zip格式,并在其解压的顶级目录中包含PKG-INFO文件(package-1.00/PKG-INFO)。infomd5sum(如果 pkginfo 字段存在则必需) – 上传元数据的 MD5 散列,以 ASCII 编码,表示摘要的十六进制表示(for byte in digest: s = s + ('%02x' % ord(byte)))。platform(可选) – 表示此分发的目标平台的字符串。这仅适用于二进制分发。它编码为<os_name>-<os_version>-<platform architecture>-<python version>。signature(可选) – 上传分发的 OpenPGP 兼容签名,由作者签名。这可由目录系统用于自动化接受上传。protocol_version– 指示客户端支持的协议版本的字符串。本文档描述协议版本“1”。
返回数据
上传状态将使用 HTTP 非标准 (X-*) 头部报告。X-Swalow-Status 头部可能具有以下值:
SUCCESS– 表示上传成功。FAILURE– 上传因某种原因无法处理。TRYAGAIN– 服务器目前无法接受上传,但客户端应在稍后重试。这可能是由于服务器资源短缺、管理停机等原因造成的。
可选地,可能有一个 X-Swalow-Reason 头部,其中包含一个人类可读的字符串,提供有关 X-Swalow-Status 的更详细信息。
如果没有 X-Swalow-Status 头部,或者它不包含上述三个字符串之一,则应将其视为临时故障。
示例
>>> f = urllib.urlopen('https://pythonlang.cn:80/pypi')
>>> s = f.headers['x-swalow-status']
>>> s = s + ': ' + f.headers.get('x-swalow-reason', '<None>')
>>> print s
FAILURE: Required field "distribution" missing.
示例表单
上传客户端必须以 Netscape Navigator Linux 4.76 版在提供以下表单时生成的形式提交页面
<H1>Upload file</H1>
<FORM NAME="fileupload" METHOD="POST" ACTION="pypi"
ENCTYPE="multipart/form-data">
<INPUT TYPE="file" NAME="distribution"><BR>
<INPUT TYPE="text" NAME="distmd5sum"><BR>
<INPUT TYPE="file" NAME="pkginfo"><BR>
<INPUT TYPE="text" NAME="infomd5sum"><BR>
<INPUT TYPE="text" NAME="platform"><BR>
<INPUT TYPE="text" NAME="signature"><BR>
<INPUT TYPE="hidden" NAME="protocol_version" VALUE="1"><BR>
<INPUT TYPE="SUBMIT" VALUE="Upload">
</FORM>
平台
以下是有效的操作系统名称:
aix beos debian dos freebsd hpux mac macos mandrake netbsd
openbsd qnx redhat solaris suse windows yellowdog
上述包括多种不同类型的 Linux 发行版。由于版本问题,这些必须分开,并且预期当一个系统使用在其他类似系统上制作的发行版时,下载客户端将进行区分。
版本是供应商为特定发行版指定的官方版本字符串。例如,“2000”和“nt”(Windows)、“9.04”(HP-UX)、“7.0”(RedHat、Mandrake)。
以下是有效的架构:
alpha hppa ix86 powerpc sparc ultrasparc
状态
我目前已实现了一个概念验证客户端和服务器。我计划在 2.1 版本发布时准备好 Distutils 补丁。结合 Andrew 的 PEP 241 用于指定分发元数据,我希望能够获得一个平台,使我们能够收集真实世界的数据,以最终确定 2.2 版本的目录系统。
版权
本文档已置于公共领域。
来源:https://github.com/python/peps/blob/main/peps/pep-0243.rst