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

Python 增强提案

附录:许可证示例

摘要

本文档包含有关 PEP 639 在现实生活中的应用指南 示例

示例

基本示例

截至 59.1.1 版,Setuptools 项目本身在其自己的项目源元数据中不使用 License 字段。此外,它不再像以前那样显式指定 license_file/license_files,因为 Setuptools 依赖于其自动包含与许可证相关的文件的常见模式,例如它使用的 LICENSE 文件。

它在其 setup.cfg 中包含以下与许可证相关的元数据

[metadata]
classifiers =
    License :: OSI Approved :: MIT License

迁移到 PEP 639 的最简单方法是改为使用以下内容

[metadata]
license_expression = MIT

或者,在 pyproject.toml[project] 表格中

[project]
license = "MIT"

然后,发行版软件包的输出核心元数据将为

License-Expression: MIT
License-File: LICENSE

LICENSE 文件将存储在 sdist 中的 /setuptools-${VERSION}/LICENSE 和 wheel 中的 /setuptools-${VERSION}.dist-info/licenses/LICENSE 中,并在安装时从那里解压到站点目录(例如 site-packages);/ 是相应归档文件的根目录,${VERSION} 是核心元数据中 Setuptools 版本的版本。

高级示例

假设 Setuptools 要包含在 setuptools/_vendor/pkg_resources/_vendor 目录中进行销售的第三方项目的许可证;具体来说

packaging==21.2
pyparsing==2.2.1
ordered-set==3.1.1
more_itertools==8.8.0

这些项目的许可证表达式为

packaging: Apache-2.0 OR BSD-2-Clause
pyparsing: MIT
ordered-set: MIT
more_itertools: MIT

涵盖 Setuptools 本身及其销售的依赖项的综合许可证表达式将包含这些元数据,并将所有许可证表达式组合成一个。这样的表达式可能是

MIT AND (Apache-2.0 OR BSD-2-Clause)

此外,根据许可证的要求,必须在软件包中包含相关的许可证文件。假设 LICENSE 文件包含 MIT 许可证的文本以及 Setuptools、pyparsingmore_itertoolsordered-set 使用的版权声明;并且 setuptools/_vendor/packaging/ 目录中的 LICENSE* 文件包含 Apache 2.0 和 2 条款 BSD 许可证文本以及 Packaging 版权声明和 许可证选择通知

具体来说,我们假设许可证文件位于项目源代码树中的以下路径(相对于项目根目录和 pyproject.toml

LICENSE
setuptools/_vendor/packaging/LICENSE
setuptools/_vendor/packaging/LICENSE.APACHE
setuptools/_vendor/packaging/LICENSE.BSD

将所有内容放在一起,我们的 setup.cfg 将是

[metadata]
license_expression = MIT AND (Apache-2.0 OR BSD-2-Clause)
license_files =
    LICENSE
    setuptools/_vendor/packaging/LICENSE
    setuptools/_vendor/packaging/LICENSE.APACHE
    setuptools/_vendor/packaging/LICENSE.BSD

pyproject.toml[project] 表格中,可以通过 glob 模式指定许可证文件

[project]
license = "MIT AND (Apache-2.0 OR BSD-2-Clause)"
license-files = [
    "LICENSE*",
    "setuptools/_vendor/LICENSE*",
]

或者,也可以显式指定它们(路径将被解释为 glob 模式)

[project]
license = "MIT AND (Apache-2.0 OR BSD-2-Clause)"
license-files = [
    "LICENSE",
    "setuptools/_vendor/LICENSE",
    "setuptools/_vendor/LICENSE.APACHE",
    "setuptools/_vendor/LICENSE.BSD",
]

使用任一方法,发行版中的输出核心元数据将为

License-Expression: MIT AND (Apache-2.0 OR BSD-2-Clause)
License-File: LICENSE
License-File: setuptools/_vendor/packaging/LICENSE
License-File: setuptools/_vendor/packaging/LICENSE.APACHE
License-File: setuptools/_vendor/packaging/LICENSE.BSD

在生成的 sdist 中,其中 / 是归档文件的根目录,${VERSION} 是核心元数据中指定的 Setuptools 版本,许可证文件将位于以下路径

/setuptools-${VERSION}/LICENSE
/setuptools-${VERSION}/setuptools/_vendor/packaging/LICENSE
/setuptools-${VERSION}/setuptools/_vendor/packaging/LICENSE.APACHE
/setuptools-${VERSION}/setuptools/_vendor/packaging/LICENSE.BSD

在构建的 wheel 中,其中 / 是归档文件的根目录,${VERSION} 与之前相同,许可证文件将存储在

/setuptools-${VERSION}.dist-info/licenses/LICENSE
/setuptools-${VERSION}.dist-info/licenses/setuptools/_vendor/packaging/LICENSE
/setuptools-${VERSION}.dist-info/licenses/setuptools/_vendor/packaging/LICENSE.APACHE
/setuptools-${VERSION}.dist-info/licenses/setuptools/_vendor/packaging/LICENSE.BSD

最后,在已安装的项目中,其中 site-packages 是站点目录,${VERSION} 与之前相同,许可证文件将安装到

site-packages/setuptools-${VERSION}.dist-info/licenses/LICENSE
site-packages/setuptools-${VERSION}.dist-info/licenses/setuptools/_vendor/packaging/LICENSE
site-packages/setuptools-${VERSION}.dist-info/licenses/setuptools/_vendor/packaging/LICENSE.APACHE
site-packages/setuptools-${VERSION}.dist-info/licenses/setuptools/_vendor/packaging/LICENSE.BSD

表达式示例

一些其他有效 License-Expression 值的示例

License-Expression: MIT
License-Expression: BSD-3-Clause
License-Expression: MIT AND (Apache-2.0 OR BSD-2-clause)
License-Expression: MIT OR GPL-2.0-or-later OR (FSFUL AND BSD-2-Clause)
License-Expression: GPL-3.0-only WITH Classpath-Exception-2.0 OR BSD-3-Clause
License-Expression: LicenseRef-Public-Domain OR CC0-1.0 OR Unlicense
License-Expression: LicenseRef-Proprietary
License-Expression: LicenseRef-Custom-License