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

Python 增强提案

PEP 755 – PyPI 的隐式命名空间策略

作者:
Ofek Lev <ofekmeister at gmail.com>
发起人:
Barry Warsaw <barry at python.org>
PEP 代理人:
Dustin Ingram <di at python.org>
讨论至:
Discourse 帖子
状态:
草案
类型:
流程
主题:
打包
创建日期:
2024年9月5日
发布历史:
2024年9月7日

目录

摘要

本PEP将PEP 752在PyPI上的实现编纂成文[1]

动机

许多项目和社区将受益于保留命名空间的能力。由于PyPI旨在服务Python社区,因此收集反馈以确保满足每个人的需求至关重要。

需要一个专门的PEP,因为操作和政策细节由每个包仓库自行决定。

基本原理

PyPI一直人手不足,直到2024年7月才迎来第一位专职专家。由于资源匮乏,用户支持在包名申领组织请求存储限制增加甚至账户恢复方面一直不足。

在保留命名空间时给予付费组织更多宽限的默认政策提供以下好处:

  • PyPI将拥有持续的资金来源,用于支持专家、基础设施维护、错误修复和新功能。
  • 尽管每个申请都需要独立审查,但所需的人工反馈会减少,因为批准付费组织的过程本身就赋予了一定程度的信任。

术语

付费/公司组织
公司组织是为PyPI上的特殊功能付费的组织。本PEP在大多数情况下为了简洁和方便非母语人士理解,将其称为付费组织。
根授权
PEP 752术语定义的一个授权。
子授权
由根授权创建的授权,其关联的命名空间是PEP 752术语定义的子命名空间。

实施

授权申请

提交

只有组织(非用户)账户才能访问授权申请表。

付费组织的申请在审查队列中享有优先权。这既是为了向付费组织提供有意义的利益,也是为了确保PyPI运营成本(包括更多审查员)的资金可用。

批准标准

  1. 命名空间不能是像toolapps这样的常见名称。
  2. 命名空间应大于三个字符。
  3. 命名空间应正确清晰地标识保留所有者。
  4. 该组织应积极使用该命名空间。
  5. 应有证据表明保留该命名空间可能导致歧义、混淆或对社区造成其他伤害。

非付费组织将代表以下情况之一:

  • 拥有许多包的大型流行开源项目
  • 积极发布包的大学
  • 积极发布包的政府组织
  • 积极发布包的非营利组织/非政府组织,如Our World in Data

总的来说,审查员应该对申请尚未使用的授权的付费组织更为宽容。

例如,向一家初创公司或拥有新产品线的现有公司授予命名空间是合理的,而向一个没有太多用户的社区项目授予命名空间则不那么合理。

拒绝

被拒绝的申请将收到基于批准标准的明确拒绝理由。因命名空间过于常见而被拒绝的申请将内部保留,供未来的审查员参考,并且试图保留此前因此原因被拒绝的命名空间的新申请将显示警告。

接受

当一个命名空间的申请被接受,且该命名空间被组织外部的项目使用时,一封电子邮件将发送给这些项目的所有者,通知他们新的授权。该电子邮件将包含一个指向命名空间页面的链接。

授权类型

授权有两种类型。

根授权

一个组织为其每个批准的申请获得一个根授权。该授权可以产生任意数量的子授权

子授权

根授权的所有者可以随时创建子授权,无需批准。此类授权关联的命名空间必须是根授权命名空间的子命名空间。

子授权不能拥有自己的子授权。

授权所有权

授权的所有者可以允许任意数量的其他组织使用该授权。这些授权的行为就像它们由该组织拥有一样,即便是所有者也无法将包上传到该命名空间。所有者可以随时撤销此权限。

所有者可以随时将所有权转移给另一个组织,无需PyPI管理员批准。如果该组织是付费组织,则目标转移方也必须是付费组织。允许的组织设置也将一同转移。

用户界面

命名空间页面

每个活跃授权的命名空间都将有自己的页面,其中包含诸如其开放状态、当前所有者、授予所有权的时间以及匹配该命名空间的项目总数等信息。

项目页面

每个匹配活跃命名空间授权的项目的页面(示例)都将指示前缀是什么(NuGet目前没有这样做),并将以胶囊或标签的形式突出显示。此值将与命名空间详细信息API中的prefix键匹配。

点击命名空间将把用户带到其页面

视觉指示器

对于匹配活跃命名空间授权的项目,用户将能够快速确定以下哪种情况适用:

  1. 授权所有者绑定的项目将没有视觉指示器,用户应仅依赖始终存在的前缀。
  2. 授权所有者无关且匹配授权开放的项目将具有独特的指示器,该指示器不会传达不信任或危险。一个不错的选择可能是Font Awesome的用户图标或Google Fonts的图标。
  3. 授权所有者无关且匹配授权受限的项目将具有独特的视觉指示器。这种情况发生在项目在授权创建之前就已存在时。该指示器将传达不真实或缺乏信任。一个不错的选择可能是警告标志(⚠)。

开放命名空间

创建子授权时,其开放状态将继承自根授权。子授权的所有者可以随时将其设置为开放。如果授权是开放的,则除非授权的所有者是匹配该命名空间的每个项目的所有者,否则不能将其设置为受限。

授权移除

如果授权与其他组织共享,则所有者组织必须先发起转让,作为组织删除的先决条件。

如果授权未共享,则所有者可以在以下任一情况下取消声明命名空间:

  • 组织手动将自己从所有者中移除。
  • 组织被删除。

当保留的命名空间被取消声明时,用户界面将反映这一点,即匹配的项目将不再在其页面上显示任何指示器,并且该命名空间也不会有专门的页面。

如何教授此内容

对于组织,我们将记录如何保留命名空间、其好处和定价。

我们将在同一页面上记录PEP 541,以便组织了解报告与其授权匹配的现有包不当使用的主要机制。

被拒绝的想法

查看所有活跃授权的页面

没有页面可以查看所有活跃的命名空间授权,因为这可能会泄露私人信息,例如即将推出的产品。

自有项目的视觉指示器

对于与授权所有者绑定的项目没有指示器,主要是为了减少混乱,尤其是考虑到这是最常见的情况。

如果存在指示器,它不会是像NuGet选择的复选标记或类似标记,因为它可能会错误地传达使用包固有的相关安全保证。此外,一些社交媒体平台使用复选标记来表示经过验证的用户,这可能会导致混淆。

参考资料


来源: https://github.com/python/peps/blob/main/peps/pep-0755.rst

最后修改: 2025-03-20 22:51:26 GMT