附录:用户场景
摘要
本文档包含有关 PEP 639 在现实生活用户场景中的应用指南。
用户场景
以下内容从用户的角度涵盖了一系列常见用例,并为每个用例提供了指导。请注意,以下内容**不应**被视为法律建议,如果读者对其所在司法管辖区的具体情况不确定,应咨询有执照的法律专业人士。
我有一个不会分发的私有包
如果您的包未公开共享,即在您的公司、组织或家庭之外,通常无需包含正式许可证,因此您在此处无需执行任何额外操作。
但是,在您的包配置中包含LicenseRef-Proprietary
作为许可证表达式,以及在项目根目录中的LICENSE.txt
文件中包含版权声明和任何法律声明仍然是一个好主意,打包工具会自动包含这些信息。
我想在特定许可证下分发我的项目
要使用特定许可证,只需将其文本粘贴到存储库根目录中的LICENSE.txt
文件中(如果您还没有以LICENSE
或COPYING
开头的文件中包含许可证文本),并在pyproject.toml
中的[project]
下添加license = "LICENSE-ID"
,如果您的打包工具支持,则在它的配置文件中添加。您可以在ChooseALicense或SPDX等网站上找到LICENSE-ID
和可复制的许可证文本。
许多流行的代码托管平台、项目模板和打包工具可以为您添加许可证文件,并且将来可能会支持该表达式。
我维护一个已经获得许可的现有包
如果您的项目中已经有许可证文件和元数据,则您只需要进行一些调整即可利用新功能。
在您的项目配置文件中,在license
下输入您的许可证表达式(pyproject.toml
中的[project]
表),或您的打包工具的等效项,并确保删除任何旧的license
表子键或License ::
分类器。您的现有license
值可能已经有效(例如MIT
、Apache-2.0 OR BSD-2-Clause
等);否则,请查看SPDX 许可证列表,查找与您的项目中使用的许可证匹配的标识符。
确保在pyproject.toml
中的[project]
下的license-files.paths
或license-files.globs
下列出您的许可证文件,或者在工具的配置文件中列出。
有关如何在实践中使用此功能的简单但完整的现实世界演示,请参阅基本示例。打包工具可能支持自动转换旧的许可证元数据;有关更多信息,请查看工具的文档。
我的包包含其他在不同许可证下的代码
如果您的项目包含来自其他受不同许可证保护的代码,例如供应商依赖项或从其他开源软件复制的文件,您可以构建一个许可证表达式来描述所涉及的许可证及其之间的关系。
简而言之,License-1 AND License-2
表示您的项目或其部分应用**两个**许可证(例如,您包含了一个在其他许可证下的文件),而License-1 OR License-2
表示可以使用**任何一个**许可证,由用户选择(例如,您希望允许用户选择多个许可证)。您可以使用括号(()
)进行分组,以形成涵盖即使是最复杂情况的表达式。
在您的项目配置文件中,在license
下输入您的许可证表达式(pyproject.toml
的[project]
表),或您的打包工具的等效项,并确保删除任何旧的license
表子键或License ::
分类器。
此外,请确保将所有许可证的完整许可证文本作为文件添加到项目存储库中的某个位置。在pyproject.toml
中的[project]
下的license-files.paths
或license-files.globs
下列出每个文件的相对路径或 glob 模式(如果您的工具支持),或者在工具的配置文件中列出。
例如,如果您的项目是 MIT 许可证,但包含了一个供应商依赖项(例如packaging
),该依赖项是根据 Apache 2.0 或 2 条款 BSD 许可证许可的,那么您的许可证表达式将为MIT AND (Apache-2.0 OR BSD-2-Clause)
。您可能在存储库根目录中有一个LICENSE.txt
,以及_vendor
子目录中的LICENSE-APACHE.txt
和LICENSE-BSD.txt
,因此要包含所有这些文件,您将指定["LICENSE.txt", "_vendor/packaging/LICENSE*"]
作为 glob 模式,或["LICENSE.txt", "_vendor/LICENSE-APACHE.txt", "_vendor/LICENSE-BSD.txt"]
作为文字文件路径。
有关此功能在现实世界复杂项目中的端到端应用,请参阅高级示例,其中包含许多技术细节,并参阅教程,以获取有关使用 SPDX 标识符和表达式的更多帮助和示例。