4. 소스 배포판 만들기

참고

이 문서는 https://setuptools.readthedocs.io/en/latest/setuptools.htmlsetuptools 설명서가 현재 여기에 포함된 모든 관련 정보를 독립적으로 다루기 전까지만 보존됩니다.

간단한 예 섹션에 표시된 것처럼, sdist 명령을 사용하여 소스 배포를 만듭니다. 가장 간단한 경우,

python setup.py sdist

(설정 스크립트나 구성 파일에 sdist 옵션을 지정하지 않았다고 가정할 때) sdist는 현재 플랫폼의 기본 형식의 아카이브를 만듭니다. 기본 형식은 유닉스에서는 gzip 된 tar 파일(.tar.gz)이고, 윈도우에서는 ZIP 파일입니다.

--formats 옵션을 사용하여 원하는 만큼 형식을 지정할 수 있습니다. 예를 들면:

python setup.py sdist --formats=gztar,zip

은 gzip 된 tar 파일과 zip 파일을 만듭니다. 사용 가능한 형식은 다음과 같습니다:

형식

설명

노트

zip

zip 파일 (.zip)

(1),(3)

gztar

gzip 된 tar 파일 (.tar.gz)

(2)

bztar

bzip2 된 tar 파일 (.tar.bz2)

xztar

xz 된 tar 파일 (.tar.xz)

ztar

compress 된 tar 파일 (.tar.Z)

(4)

tar

tar 파일 (.tar)

버전 3.5에서 변경: xztar 형식에 대한 지원이 추가되었습니다.

노트:

  1. 윈도우의 기본값

  2. 유닉스의 기본값

  3. 외부 zip 유틸리티나 zipfile 모듈(파이썬 1.6 이후 표준 파이썬 라이브러리의 일부)이 필요합니다

  4. compress 프로그램이 필요합니다. 이 형식은 현재 폐지될 예정이며 이후 버전의 파이썬에서는 제거될 예정입니다.

모든 tar 형식(gztar, bztar, xztar, ztar 또는 tar)을 사용할 때, 유닉스에서 각 아카이브 멤버에 대해 설정될 ownergroup 이름을 지정할 수 있습니다.

예를 들어, 아카이브의 모든 파일을 root가 소유하도록 하고 싶으면:

python setup.py sdist --owner=root --group=root

4.1. 배포할 파일 지정하기

명시적인 파일 목록(또는 생성하는 방법에 대한 지침)을 제공하지 않으면, sdist 명령은 최소 기본 집합을 소스 배포에 넣습니다:

  • py_modulespackages 옵션에 의해 암시된 모든 파이썬 소스 파일

  • ext_moduleslibraries 옵션에 언급된 모든 C 소스 파일

  • scripts 옵션으로 식별된 스크립트. 스크립트 설치하기를 참조하십시오.

  • 테스트 스크립트처럼 보이는 것: test/test*.py (현재, Distutils는 소스 배포에 포함하는 것을 제외하고 테스트 스크립트로 아무것도 하지 않지만, 향후에는 파이썬 모듈 배포를 테스트하기 위한 표준이 있을 것입니다)

  • 표준 README 파일 (README, README.txt 또는 README.rst), setup.py (또는 여러분이 설정 스크립트라고 부르는 것) 및 setup.cfg.

  • package_data 메타 데이터와 일치하는 모든 파일. 패키지 데이터 설치하기를 참조하십시오.

  • data_files 메타 데이터와 일치하는 모든 파일. 추가 파일 설치하기를 참조하십시오.

때로는 이것으로 충분하지만, 일반적으로 배포할 추가 파일을 지정하려고 합니다. 이를 수행하는 일반적인 방법은 기본적으로 MANIFEST.in이라는 매니페스트 템플릿(manifest template)을 작성하는 것입니다. 매니페스트 템플릿은 소스 배포에 포함할 정확한 파일 목록인 매니페스트 파일 MANIFEST를 생성하는 방법에 대한 지침 목록일 뿐입니다. sdist 명령은 이 템플릿을 처리하고 해당 지침과 파일 시스템에서 찾은 내용을 기반으로 매니페스트를 생성합니다.

여러분 자신의 매니페스트 파일을 만드는 것을 선호한다면 형식은 간단합니다: 한 줄에 파일 이름 하나, 일반 파일 (또는 이들에 대한 심볼릭 링크)만 가능합니다. 여러분 자신의 MANIFEST를 제공하면, 모든 것을 지정해야 합니다: 위에서 설명한 기본 파일 집합은 이 경우 적용되지 않습니다.

버전 3.1에서 변경: 기존 생성된 MANIFESTsdist가 수정 시간을 MANIFEST.in이나 setup.py와 비교하지 않고 재생성됩니다.

버전 3.1.3에서 변경: MANIFEST 파일은 생성되었음을 나타내는 주석으로 시작합니다. 이 주석이 없는 파일은 덮어쓰거나 제거되지 않습니다.

버전 3.2.2에서 변경: 예전처럼, MANIFEST.in이 존재하지 않으면 sdistMANIFEST 파일을 읽습니다.

버전 3.7에서 변경: README.rst는 이제 distutils 표준 README 목록에 포함됩니다.

매니페스트 템플릿에는 한 줄에 하나의 명령이 있으며, 각 명령은 소스 배포에서 포함하거나 제외할 파일 집합을 지정합니다. 예를 들기 위해, 다시 Distutils의 매니페스트 템플릿으로 전환합니다:

include *.txt
recursive-include examples *.txt *.py
prune examples/sample?/build

의미는 꽤 명확해야 합니다: *.txt와 일치하는 배포 루트의 모든 파일, *.txt*.py와 일치하는 examples 디렉터리 아래의 모든 파일을 포함하고, examples/sample?/build와 일치하는 모든 디렉터리를 제외합니다. 이 모든 것은 표준 포함 집합 에 수행되므로, 매니페스트 템플릿의 명시적 지침을 사용하여 표준 집합에서 파일을 제외할 수 있습니다. (또는 --no-defaults 옵션을 사용하여 표준 집합을 완전히 비활성화 할 수 있습니다.) 매니페스트 템플릿 미니 언어에서 사용할 수 있는 다른 명령이 몇 가지 있습니다; 섹션 소스 배포 만들기: sdist 명령을 참조하십시오.

매니페스트 템플릿의 명령 순서는 중요합니다: 처음에는, 위에서 설명한 기본 파일 목록이 있으며 템플릿의 각 명령은 해당 파일 목록에 대해 추가하거나 제거합니다. 일단 매니페스트 템플릿을 완전히 처리하면, 소스 배포에 포함되지 않아야 하는 파일을 제거합니다:

  • Distutils “빌드” 트리(기본값은 build/)의 모든 파일

  • RCS, CVS, .svn, .hg, .git, .bzr 또는 _darcs라는 디렉터리의 모든 파일

이제 전체 파일 목록이 준비되어서, 이 파일은 나중에 참조할 수 있도록 매니페스트에 기록되고, 소스 배포 아카이브를 빌드하는 데 사용됩니다.

--no-defaults 옵션으로 기본 포함 파일 집합을 비활성화 할 수 있으며, --no-prune으로 표준 제외 집합을 비활성화 할 수 있습니다.

Distutils의 자체 매니페스트 템플릿에 따라, sdist 명령이 Distutils 소스 배포에 포함할 파일 목록을 빌드하는 방법을 추적해 보겠습니다:

  1. distutilsdistutils/command 서브 디렉터리에 있는 모든 파이썬 소스 파일을 포함합니다 (두 디렉터리에 해당하는 패키지가 설정 스크립트의 packages 옵션에 언급되었기 때문입니다—섹션 설정 스크립트 작성하기를 참조하십시오)

  2. README.txt, setup.pysetup.cfg를 포함합니다 (표준 파일)

  3. test/test*.py를 포함합니다 (표준 파일)

  4. 배포 루트에 있는 *.txt를 포함합니다 (이것은 README.txt를 두 번 찾을 수 있지만, 나중에 이러한 중복은 제거됩니다)

  5. examples 아래의 서브 트리에 있는 *.txt*.py와 일치하는 모든 것을 포함합니다.

  6. examples/sample?/build와 일치하는 디렉터리에서 시작하는 서브 트리에 있는 모든 파일을 제외합니다—이것은 이전 두 단계에서 포함된 파일을 제외할 수 있어서, 매니페스트 템플릿의 prune 명령이 recursive-include 명령 뒤에 오는 것이 중요합니다

  7. 전체 build 트리와 RCS, CVS, .svn, .hg, .git, .bzr_darcs 디렉터리를 제외합니다

설정 스크립트와 마찬가지로, 매니페스트 템플릿의 파일과 디렉터리 이름은 항상 슬래시로 구분해야 합니다; Distutils는 이를 플랫폼의 표준 표현으로 변환합니다. 이런 방식으로, 매니페스트 템플릿은 운영 체제에 걸쳐 이식성이 있습니다.