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

Python 增强提案

重要

本 PEP 为历史文档。最新、最规范的规范,请参阅 许可示例和用户场景,该文档维护在 PyPA 规范页面

×

有关如何提出更改的建议,请参阅PyPA 规范更新流程

附录:用户场景

摘要

本文档包含关于 PEP 639 在实际 用户场景 中应用的指南。

用户场景

以下内容从用户角度涵盖了常见的用例范围,并为每种情况提供了指导。请注意,以下内容应被视为法律建议,如果您不确定具体情况,应咨询您所在司法管辖区的注册律师。

我有一个不会分发的私有软件包

如果您的软件包不公开共享,即不在您的公司、组织或家庭之外分发,那么通常不需要包含正式的许可证,因此您不必为此做任何额外的事情。

但是,仍然建议在您的软件包配置中包含 LicenseRef-Proprietary 作为许可证表达式,并/或在项目目录根目录下的 LICENSE.txt 文件中包含版权声明和任何法律通知,这些文件将被打包工具自动包含。

我想根据特定许可证分发我的项目

要使用特定许可证,只需将其文本粘贴到仓库根目录的 LICENSE.txt 文件中(如果您还没有以 LICENSECOPYING 开头的文件),并在 pyproject.toml[project] 部分下添加 license = "LICENSE-ID"(如果您的打包工具支持),或者在它的配置文件中添加。您可以在 ChooseALicenseSPDX 等网站上找到 LICENSE-ID 和可复制的许可证文本。

许多流行的代码托管平台、项目模板和打包工具可以为您添加许可证文件,并且未来也可能支持许可证表达式。

我维护一个已获得许可的现有软件包

如果您已经为项目添加了许可证文件和元数据,您只需要做一些小调整即可利用新功能。

在您的项目配置文件中,在 licensepyproject.toml 中的 [project] 表)或您打包工具的等效部分下输入您的许可证表达式,并确保删除任何旧的 license 表子键或 License :: 分类器。您的现有 license 值可能已经有效(例如 MITApache-2.0 OR BSD-2-Clause 等);否则,请查阅 SPDX 许可证列表,找到与您项目所用许可证匹配的标识符。

确保在 pyproject.toml[project] 部分下,使用 license-files.pathslicense-files.globs 列出您的许可证文件,或者在您的工具的配置文件中列出。

请参阅 基本示例,其中提供了简单但完整的实际演示,说明了这一点是如何实现的。打包工具可能支持自动转换旧的许可证元数据;请查看您工具的文档了解更多信息。

我的软件包包含其他不同许可的代码

如果您的项目包含来自他人的、受不同许可证约束的代码,例如已包含的依赖项或从其他开源软件复制的文件,您可以构建一个许可证表达式来描述涉及的许可证及其之间的关系。

简而言之,License-1 AND License-2 表示两个许可证都适用于您的项目或其部分(例如,您包含了一个受其他许可证约束的文件),而 License-1 OR License-2 表示用户可以选择其中一个许可证(例如,您希望允许用户选择多个许可证)。您可以使用括号(())进行分组,以形成涵盖最复杂情况的表达式。

在您的项目配置文件中,在 licensepyproject.toml[project] 表)或您打包工具的等效部分下输入您的许可证表达式,并确保删除任何旧的 license 表子键或 License :: 分类器。

此外,请确保您将所有许可证的完整文本作为文件添加到您的项目仓库中的某个位置。在 pyproject.toml[project] 部分下,使用 license-files.pathslicense-files.globs 列出每个文件的相对路径或 glob 模式(如果您的工具支持),或者在您的工具的配置文件中列出。

例如,如果您的项目采用 MIT 许可证,但包含了一个采用 Apache 2.0 或 2-clause BSD 许可证的已包含依赖项(例如 packaging),您的许可证表达式将是 MIT AND (Apache-2.0 OR BSD-2-Clause)。您可能在仓库根目录中有一个 LICENSE.txt 文件,并在 _vendor 子目录中有 LICENSE-APACHE.txtLICENSE-BSD.txt 文件。为了包含所有这些文件,您将指定 ["LICENSE.txt", "_vendor/packaging/LICENSE*"] 作为 glob 模式,或者 ["LICENSE.txt", "_vendor/LICENSE-APACHE.txt", "_vendor/LICENSE-BSD.txt"] 作为文字文件路径。

请参阅完整的 高级示例,其中对一个复杂的实际项目进行了端到端的应用,包含许多技术细节,并参考 教程,以获取更多关于使用 SPDX 标识符和表达式的帮助和示例。