Following system colour scheme - Python 增强提案 Selected dark colour scheme - Python 增强提案 Selected light colour scheme - Python 增强提案

Python增强提案

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