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日
摘要
动机
许多项目和社区将受益于保留命名空间的能力。由于PyPI旨在服务Python社区,因此收集反馈以确保满足每个人的需求至关重要。
需要一个专门的PEP,因为操作和政策细节由每个包仓库自行决定。
基本原理
PyPI一直人手不足,直到2024年7月才迎来第一位专职专家。由于资源匮乏,用户支持在包名申领、组织请求、存储限制增加甚至账户恢复方面一直不足。
在保留命名空间时给予付费组织更多宽限的默认政策提供以下好处:
- PyPI将拥有持续的资金来源,用于支持专家、基础设施维护、错误修复和新功能。
- 尽管每个申请都需要独立审查,但所需的人工反馈会减少,因为批准付费组织的过程本身就赋予了一定程度的信任。
术语
- 付费/公司组织
- 公司组织是为PyPI上的特殊功能付费的组织。本PEP在大多数情况下为了简洁和方便非母语人士理解,将其称为付费组织。
- 根授权
- 由PEP 752术语定义的一个授权。
- 子授权
- 由根授权创建的授权,其关联的命名空间是PEP 752术语定义的子命名空间。
实施
授权申请
提交
只有组织(非用户)账户才能访问授权申请表。
付费组织的申请在审查队列中享有优先权。这既是为了向付费组织提供有意义的利益,也是为了确保PyPI运营成本(包括更多审查员)的资金可用。
批准标准
- 命名空间不能是像
tool或apps这样的常见名称。 - 命名空间应大于三个字符。
- 命名空间应正确清晰地标识保留所有者。
- 该组织应积极使用该命名空间。
- 应有证据表明不保留该命名空间可能导致歧义、混淆或对社区造成其他伤害。
非付费组织将代表以下情况之一:
- 拥有许多包的大型流行开源项目
- 积极发布包的大学
- 积极发布包的政府组织
- 积极发布包的非营利组织/非政府组织,如Our World in Data
总的来说,审查员应该对申请尚未使用的授权的付费组织更为宽容。
例如,向一家初创公司或拥有新产品线的现有公司授予命名空间是合理的,而向一个没有太多用户的社区项目授予命名空间则不那么合理。
拒绝
被拒绝的申请将收到基于批准标准的明确拒绝理由。因命名空间过于常见而被拒绝的申请将内部保留,供未来的审查员参考,并且试图保留此前因此原因被拒绝的命名空间的新申请将显示警告。
接受
当一个命名空间的申请被接受,且该命名空间被组织外部的项目使用时,一封电子邮件将发送给这些项目的所有者,通知他们新的授权。该电子邮件将包含一个指向命名空间页面的链接。
授权类型
授权有两种类型。
根授权
一个组织为其每个批准的申请获得一个根授权。该授权可以产生任意数量的子授权。
子授权
根授权的所有者可以随时创建子授权,无需批准。此类授权关联的命名空间必须是根授权命名空间的子命名空间。
子授权不能拥有自己的子授权。
授权所有权
授权的所有者可以允许任意数量的其他组织使用该授权。这些授权的行为就像它们由该组织拥有一样,即便是所有者也无法将包上传到该命名空间。所有者可以随时撤销此权限。
所有者可以随时将所有权转移给另一个组织,无需PyPI管理员批准。如果该组织是付费组织,则目标转移方也必须是付费组织。允许的组织设置也将一同转移。
用户界面
命名空间页面
每个活跃授权的命名空间都将有自己的页面,其中包含诸如其开放状态、当前所有者、授予所有权的时间以及匹配该命名空间的项目总数等信息。
项目页面
每个匹配活跃命名空间授权的项目的页面(示例)都将指示前缀是什么(NuGet目前没有这样做),并将以胶囊或标签的形式突出显示。此值将与命名空间详细信息API中的prefix键匹配。
点击命名空间将把用户带到其页面。
视觉指示器
对于匹配活跃命名空间授权的项目,用户将能够快速确定以下哪种情况适用:
开放命名空间
创建子授权时,其开放状态将继承自根授权。子授权的所有者可以随时将其设置为开放。如果授权是开放的,则除非授权的所有者是匹配该命名空间的每个项目的所有者,否则不能将其设置为受限。
授权移除
如果授权与其他组织共享,则所有者组织必须先发起转让,作为组织删除的先决条件。
如果授权未共享,则所有者可以在以下任一情况下取消声明命名空间:
- 组织手动将自己从所有者中移除。
- 组织被删除。
当保留的命名空间被取消声明时,用户界面将反映这一点,即匹配的项目将不再在其页面上显示任何指示器,并且该命名空间也不会有专门的页面。
如何教授此内容
对于组织,我们将记录如何保留命名空间、其好处和定价。
我们将在同一页面上记录PEP 541,以便组织了解报告与其授权匹配的现有包不当使用的主要机制。
被拒绝的想法
查看所有活跃授权的页面
没有页面可以查看所有活跃的命名空间授权,因为这可能会泄露私人信息,例如即将推出的产品。
自有项目的视觉指示器
对于与授权所有者绑定的项目没有指示器,主要是为了减少混乱,尤其是考虑到这是最常见的情况。
如果存在指示器,它不会是像NuGet选择的复选标记或类似标记,因为它可能会错误地传达使用包固有的相关安全保证。此外,一些社交媒体平台使用复选标记来表示经过验证的用户,这可能会导致混淆。
参考资料
版权
本文档置于公共领域或 CC0-1.0-Universal 许可证下,以更宽松者为准。
来源: https://github.com/python/peps/blob/main/peps/pep-0755.rst
最后修改: 2025-03-20 22:51:26 GMT