附录:许可证示例
摘要
本文档包含有关 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、pyparsing
、more_itertools
和 ordered-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