Following system colour scheme Selected dark colour scheme Selected light colour scheme

Python 개선 제안 한국어 번역

PEP 229 – Distutils를 사용한 Python 빌드

Author:
A.M. Kuchling <amk at amk.ca>
Status:
Final
Type:
Standards Track
Created:
16-Nov-2000
Python-Version:
2.1
Post-History:


Table of Contents

번역·라이선스 안내

이 비공식 한국어 번역은 원문 Copyright 절의 Public Domain 조건에 따라 제공합니다. 원저자와 공식 원문은 그대로 표시합니다. 수정되지 않은 기준 원문 · 공식 최신판

소개

Modules/Setup 메커니즘에는 몇 가지 결함이 있습니다:

  • 사용 가능한 모든 모듈을 얻으려면 Modules/Setup의 일부를 주석 해제해야 한다는 것을 사람들이 기억하고 있어야 합니다.
  • Setup을 새 버전의 Python으로 옮기는 작업은 번거롭습니다. 새 모듈이 추가되었기 때문에 이전 버전을 그대로 복사할 수 없고, 두 버전을 맞춰 조정해야 합니다.
  • 사용자는 zlib 같은 필요한 라이브러리가 어디에 설치되어 있는지 직접 알아내야 합니다.

제안

Python과 함께 제공되는 모듈을 빌드하는 데 Distutils를 사용합니다.

변경 사항은 여러 부분으로 나눌 수 있습니다:

  1. Distutils가 모듈을 빌드하려면 몇몇 Python 모듈이 필요합니다. 현재로서는 최소 목록이 posix, _sre, string이라고 생각합니다.

    이 모듈들은 Distutils를 사용하기 전에 빌드되어 있어야 하므로, 단순히 Modules/Makefile에 고정으로 지정되어 자동으로 빌드될 것입니다.

  2. 시스템에 설치된 라이브러리를 확인하고 가능한 한 많은 모듈을 컴파일하는 최상위 setup.py 스크립트를 작성할 것입니다.
  3. Modules/Setup은 유지되며 그 안의 설정은 setup.py의 일반적인 동작을 재정의하므로, 버그가 있는 것으로 알려진 모듈을 비활성화하거나 특정 컴파일 또는 링커 플래그를 지정할 수 있습니다. 그러나 setup.py가 올바르게 동작하는 일반적인 경우에는 Setup의 모든 내용이 주석 처리된 상태로 남아 있을 것입니다. 더 이상 Setup을 자동으로 생성하는 것이 없으므로 나머지 Setup.* 파일들은 불필요해집니다.

이 패치는 Python 2.1에 체크인되었으며, 이후 수정되었습니다.

구현

SourceForge의 패치 #102588에 제안된 패치가 들어 있습니다. 현재 이 패치는 패치를 되돌리기 쉽도록 보수적인 방식을 취하여 가능한 한 적은 파일만 변경하려고 합니다. 예를 들어, 기존 빌드 메커니즘을 뜯어내려는 시도는 하지 않습니다. 이러한 단순화 작업은 패치가 유지될 것이 확실해지는 베타 주기 후반까지 미루거나, Python 2.2까지 미룰 수 있습니다.

이 패치는 다음과 같은 변경을 수행합니다:

  • distutils/sysconfig에 몇 가지 필요한 변경을 가합니다(이 변경들은 별도로 체크인될 것입니다)
  • 최상위 Makefile.in에서 “sharedmods” 타깃은 단순히 "./python setup.py build"를 실행하고, “sharedinstall”은 "./python setup.py install"을 실행합니다. “clobber” 타깃은 Distutils가 출력을 저장하는 build/ 하위 디렉터리도 삭제합니다.
  • Modules/Setup.config.in에는 gc 모듈과 thread 모듈에 대한 항목만 들어 있습니다. readline, curses, db 모듈은 이제 setup.py가 처리할 일이므로 제거되었습니다.
  • 이제 Modules/Setup.dist에는 _sre, posix, strop 세 모듈에 대한 항목만 들어 있습니다.
  • configure 스크립트는 setup.cfg.in으로부터 setup.cfg를 빌드합니다. 이는 두 가지 이유로 필요합니다. 하위 디렉터리에서의 빌드가 동작하도록 하기 위해서, 그리고 구성된 설치 접두사를 얻기 위해서입니다.
  • 소스 트리의 최상위 디렉터리에 setup.py를 추가합니다. setup.py는 가장 복잡하지는 않지만 이 퍼즐에서 가장 큰 조각입니다. setup.py에는 BuildExt 클래스의 서브클래스가 들어 있으며, 이 서브클래스는 detect_modules() 메서드로 확장됩니다. 이 메서드는 모듈을 언제 컴파일할 수 있는지 파악하고 해당 모듈을 ‘exts’ 리스트에 추가하는 작업을 수행합니다.

미해결 문제

Makefile을 직접 뜯어고치지 않고도 하드와이어된 모듈 3개를 비활성화할 수 있게 해야 합니까? [답변: 아닙니다.]

Distutils는 항상 모듈을 공유 라이브러리로 컴파일합니다. 이 모듈들을 최종 Python 바이너리에 정적으로 컴파일하는 것은 어떻게 지원합니까?

[답변: 아직 아무도 구현하지 않았지만, Distutils로 Python 바이너리를 빌드하는 것은 가능할 것입니다. 언젠가는 해야 할 일이지만, 최상위 Makefile.pre.in을 손보는 것으로도 충분하므로 시급한 우선순위는 아닙니다.]