부록: 라이선스 예시
초록
이 문서에는 실제 예시에 PEP 639를 적용하는 방법에 대한 지침이 담겨 있습니다.
예시
기본 예시
Setuptools 프로젝트 자체는 버전 59.1.1 기준으로 자체 프로젝트 소스 메타데이터에서 License 필드를 사용하지 않습니다. 또한 Setuptools는 자신이 사용하는 LICENSE 파일처럼 일반적인 패턴과 일치하는 라이선스 관련 파일을 자동으로 포함하는 자체 기능에 의존하므로, 이전과 달리 더 이상 license_file/license_files를 명시적으로 지정하지 않습니다.
Setuptools는 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-절(2-clause) 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
/를 아카이브의 루트로, ${VERSION}을 코어 메타데이터에 지정된 Setuptools 릴리스의 버전으로 할 때, 생성된 sdist에서 라이선스 파일은 다음 경로에 위치합니다:
/setuptools-${VERSION}/LICENSE
/setuptools-${VERSION}/setuptools/_vendor/packaging/LICENSE
/setuptools-${VERSION}/setuptools/_vendor/packaging/LICENSE.APACHE
/setuptools-${VERSION}/setuptools/_vendor/packaging/LICENSE.BSD
/를 아카이브의 루트로 하고 ${VERSION}은 앞과 같다고 할 때, 빌드된 wheel에서 라이선스 파일은 다음 위치에 저장됩니다:
/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