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
格式(允许gzip和bzip2压缩)或.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 4.76 for Linux在显示以下表单时生成的相同表单提交页面
<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
上次修改时间:2023年9月9日 17:39:29 GMT