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 752 术语 定义的授权。
子授权
由根授权创建的授权,其关联的命名空间是 PEP 752 术语 中定义的子命名空间。

实现

授权申请

提交

只有组织可以访问提交授权申请的页面。 对公司组织申请的审核将被优先处理。

批准标准

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

非公司组织将代表以下之一

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

一般而言,审核人员对申请未使用的授权的公司组织应该更加宽容。

例如,虽然将命名空间授予具有新产品线的初创公司或现有公司是合理的,但将命名空间授予没有太多用户的社区项目并不合理。

拒绝

被拒绝的申请将根据批准标准收到关于决定的明确理由。 由于命名空间过于通用而被拒绝的申请将被内部保留供未来审核人员参考,试图保留之前因该原因而被拒绝的命名空间的新申请将显示警告。

接受

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

授权类型

授权有两种类型。

根授权

每个批准的申请都会为组织获得一个根授权。 此授权可以生成任意数量的 子授权

子授权

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

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

授权所有权

授权的所有者可以允许任何数量的其他组织使用该授权。 授权的行为就好像它们属于该组织一样。 所有者可以随时撤销此权限。

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

用户界面

命名空间页面

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

项目页面

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

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

视觉指示器

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

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

开放命名空间

当创建一个 子授权 时,其 开放 状态将从 根授权 继承。 子授权的所有者可以随时将其设为开放。 如果授权是开放的,则除非授权的所有者是与命名空间匹配的每个项目的拥有者,否则它无法被设置为受限。

授予 社区项目 的根授权应该只开放,但这最终取决于申请审核人员。

撤销授权

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

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

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

当保留的命名空间被取消声明时,UI 将反映这一点,因此匹配的项目将不再在其页面上显示任何指示器,命名空间也将不再具有专用页面。

如何教授

对于组织,我们将记录如何保留命名空间、好处是什么以及定价。

被拒绝的想法

查看所有活动授权的页面

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

拥有项目的视觉指示器

没有指示器用于与 授权所有者 关联的项目,这主要是为了减少混乱,尤其是因为这是最常见的场景。

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

参考文献


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

最后修改: 2024 年 9 月 7 日 18:25:12 GMT