1. Distutils 소개
*****************

참고:

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

이 문서는 개발자/배포자의 역할에 집중하면서, Distutils를 사용하여 파이
썬 모듈을 배포하는 방법을 다룹니다: 파이썬 모듈 설치에 대한 정보를 찾
으려면 파이썬 모듈 설치 (레거시 버전) 장을 참조하십시오.


1.1. 개념과 용어
================

Distutils를 사용하는 것은 모듈 개발자와 제삼자 모듈을 설치하는 사용자/
관리자 모두에게 매우 간단합니다. 개발자로서, 당신의 책임은 (물론, 견고
하고, 잘 설명되고 잘 테스트 된 코드 작성과는 별도로) 다음과 같습니다:

* 설정 스크립트 작성 (일반적으로 "setup.py")

* (선택 사항) 설정 구성 파일 작성

* 소스 배포판 만들기

* (선택 사항) 하나 이상의 빌드된 (바이너리) 배포판 만들기

이러한 각 작업은 이 문서에서 다룹니다.

모든 모듈 개발자가 다수의 플랫폼에 액세스 할 수 있는 것은 아니므로, 다
수의 빌드된 배포판을 만들 것으로 기대할 수 있는 것은 아닙니다. 이러한
요구를 해결하기 위해 *패키저(packagers)*라는 중개자 클래스가 생길 것으
로 기대됩니다. 패키저는 모듈 개발자가 배포한 소스 배포판을 가져와서,
하나 이상의 플랫폼에서 빌드한 후, 만들어진 빌드된 배포본을 배포합니다.
따라서, 대부분의 인기 있는 플랫폼의 사용자는 설정 스크립트를 실행하지
도 코드를 컴파일하지도 않으면서 대부분의 인기 있는 파이썬 모듈 배포판
을 가장 자연스러운 방식으로 플랫폼에 설치할 수 있게 될 것입니다.


1.2. 간단한 예
==============

설정 스크립트는 일반적으로 매우 간단합니다만, 파이썬으로 작성되기 때문
에, 할 수 있는 작업에 대한 임의의 제한이 없고, 설정 스크립트에 임의의
비싼 연산을 수행하지 않도록 주의해야 합니다. 예를 들어, Autoconf 스타
일 구성 스크립트와 달리, 설정 스크립트는 모듈 배포를 빌드하고 설치하는
과정에서 여러 번 실행될 수 있습니다.

파일 "foo.py"에 포함된, "foo"라는 모듈을 배포하는 것이 원하는 전부라면
, 설정 스크립트는 다음과 같이 간단할 수 있습니다:

   from distutils.core import setup
   setup(name='foo',
         version='1.0',
         py_modules=['foo'],
         )

몇 가지 관찰 사항:

* Distutils에 제공하는 대부분의 정보는 "setup()" 함수에 키워드 인자로
  제공됩니다.

* 이러한 키워드 인자는 두 가지 범주로 분류됩니다: 패키지 메타데이터(이
  름, 버전 번호)와 패키지에 무엇이 포함되는지에 관한 정보 (이 경우, 순
  수 파이썬 모듈의 리스트)

* 모듈은 파일 이름이 아닌 모듈 이름으로 지정됩니다 (패키지와 확장에도
  동일하게 적용됩니다)

* 메타데이터를 조금 더 제공하는 것이 좋습니다, 특히 여러분의 이름, 이
  메일 주소 및 프로젝트의 URL  (예는 섹션 설정 스크립트 작성하기를 참
  조하십시오)

이 모듈의 소스 배포를 만들려면, 위 코드를 포함하는 설정 스크립트
"setup.py"를 만들고, 터미널에서 이 명령을 실행하십시오:

   python setup.py sdist

윈도우의 경우, 명령 프롬프트 창(Start ‣ Accessories)을 열고 명령을 다
음과 같이 바꾸십시오:

   setup.py sdist

**sdist**는 설정 스크립트 "setup.py"와 모듈 "foo.py"를 포함하는 아카이
브 파일(예를 들어 유닉스의 타르볼(tarball), 윈도우의 ZIP 파일)을 만듭
니다. 아카이브 파일의 이름은 "foo-1.0.tar.gz"(또는 ".zip")가 되고, 디
렉터리 "foo-1.0"에 압축이 풀립니다.

최종 사용자가 "foo" 모듈을 설치하려면, "foo-1.0.tar.gz"(또는 ".zip")를
다운로드하여, 압축을 풀고, --- "foo-1.0" 디렉터리에서 --- 다음을 실행
하기만 하면 됩니다:

   python setup.py install

그러면 "foo.py"를 파이썬 설치에서 제삼자 모듈을 위한 적절한 디렉터리에
복사합니다.

이 간단한 예는 Distutils의 몇 가지 기본 개념을 보여줍니다. 먼저, 개발
자와 설치자 모두 같은 기본 사용자 인터페이스(즉 설정 스크립트)를 갖습
니다. 차이점은 사용하는 Distutils *명령(commands)*입니다: **sdist** 명
령은 거의 모듈 개발자 전용이지만, **install**은 설치자를 위한 경우가
많습니다 (대부분의 개발자는 때때로 자신의 코드를 설치하려고 하지만).

사용자가 정말 쉽게 작업하도록 하려면, 하나 이상의 빌드된 배포를 만들
수 있습니다. 예를 들어, 윈도우 기계에서 실행 중이고, 다른 윈도우 사용
자의 작업을 쉽게 만들려면 **bdist_wininst** 명령을 사용하여 실행 가능
설치 프로그램(이 플랫폼에서 가장 적합한 빌드 유형)을 만들 수 있습니다.
예를 들면:

   python setup.py bdist_wininst

은 현재 디렉터리에 실행 가능한 설치 프로그램 "foo-1.0.win32.exe"를 만
듭니다.

다른 유용한 빌드된 배포 형식은 **bdist_rpm** 명령으로 구현된 RPM,
Solaris **pkgtool** (**bdist_pkgtool**) 및 HP-UX **swinstall**
(**bdist_sdux**) 입니다. 예를 들어, 다음 명령은 "foo-1.0.noarch.rpm"이
라는 RPM 파일을 만듭니다:

   python setup.py bdist_rpm

(**bdist_rpm** 명령은 **rpm** 실행 파일을 사용해서, 레드햇 리눅스(Red
Hat Linux), SuSE 리눅스 또는 Mandrake 리눅스와 같은 RPM 기반 시스템에
서 실행해야 합니다.)

다음을 실행하여 언제든지 사용 가능한 배포 형식을 찾을 수 있습니다:

   python setup.py bdist --help-formats


1.3. 일반적인 파이썬 용어
=========================

이 문서를 읽고 있다면, 아마도 모듈, 확장 등이 무엇인지 잘 알고 있을 것
입니다. 그런데도, 모든 사람이 공통된 출발점에서 시작하도록 하기 위해,
다음과 같은 일반적인 파이썬 용어에 대한 용어집을 제공합니다:

모듈
   파이썬에서 코드 재사용의 기본 단위: 다른 코드가 임포트 한 코드 블록
   . 세 가지 유형의 모듈을 여기에서 다룹니다: 순수 파이썬 모듈, 확장
   모듈 및 패키지.

순수 파이썬 모듈
   파이썬으로 작성되고 단일 ".py" 파일 (그리고 아마도 관련된 ".pyc" 파
   일)에 포함된 모듈. "순수 모듈" 이라고도 합니다.

확장 모듈
   파이썬 구현의 저수준 언어로 작성된 모듈: 파이썬에서는 C/C++, Jython
   에서는 Java. 일반적으로 동적으로 로드할 수 있는 단일 사전 컴파일된
   파일에 포함됩니다, 예를 들어 유닉스의 파이썬 확장을 위한 공유 객체
   (".so") 파일, 윈도우의 파이썬 확장을 위한 DLL (".pyd" 확장자) 또는
   Jython 확장을 위한 Java 클래스 파일. (현재 Distutils는 파이썬의
   C/C++ 확장만 처리합니다.)

패키지
   다른 모듈을 포함하는 모듈; 일반적으로 파일 시스템의 디렉터리에 포함
   되며 파일 "__init__.py"의 존재로 다른 디렉터리와 구별됩니다.

루트 패키지
   패키지 계층의 루트 (이것은 "__init__.py" 파일을 가지고 있지 않기 때
   문에, 진짜 패키지는 아닙니다. 그러나 우리는 이것에 뭔가 이름을 붙여
   야 합니다.) 표준 라이브러리의 대부분은 루트 패키지에 있으며, 더 큰
   모듈 컬렉션에 속하지 않는 많은 소규모 독립형 제삼자 모듈도 마찬가지
   입니다. 일반 패키지와 달리, 루트 패키지에 있는 모듈은 여러 디렉터리
   에서 찾을 수 있습니다: 실제로 "sys.path"에 나열된 모든 디렉터리는
   모듈을 루트 패키지에 제공합니다.


1.4. Distutils 관련 용어
========================

다음 용어는 Distutils를 사용하여 파이썬 모듈을 배포하는 도메인에 더 구
체적으로 적용됩니다:

모듈 배포
   다운로드 가능한 단일 리소스로 함께 배포되고 *함께* 설치하는 파이썬
   모듈 모음입니다. 잘 알려진 몇 가지 모듈 배포의 예는 NumPy, SciPy,
   Pillow 또는 mxBase입니다. (이것은 이 용어가 파이썬 문맥에서 이미 사
   용된 것을 제외하고는 *패키지*라고 부릅니다: 단일 모듈 배포에는 0, 1
   또는 여러 파이썬 패키지가 포함될 수 있습니다.)

순수한 모듈 배포
   순수한 파이썬 모듈과 패키지만 포함하는 모듈 배포. 때때로 "순수 배포
   " 라고도 합니다.

순수하지 않은 모듈 배포
   적어도 하나의 확장 모듈을 포함하는 모듈 배포. 때때로 "비순수 배포"
   라고도 합니다.

배포 루트
   소스 트리(또는 소스 배포)의 최상위 디렉터리; "setup.py"가 존재하는
   디렉터리. 일반적으로 이 디렉터리에서 "setup.py"가 실행됩니다.
