PEP 376 – 설치된 Python 배포판 데이터베이스
- Author:
- Tarek Ziadé <tarek at ziade.org>
- Status:
- Final
- Type:
- Standards Track
- Topic:
- Packaging
- Created:
- 22-Feb-2009
- Python-Version:
- 2.7, 3.2
- Post-History:
- 22-Jun-2009
번역·라이선스 안내
이 비공식 한국어 번역은 원문 Copyright 절의 Public Domain 조건에 따라 제공합니다. 원저자와 공식 원문은 그대로 표시합니다. 수정되지 않은 기준 원문 · 공식 최신판
초록
이 PEP의 목표는 시스템에 설치된 프로젝트 배포판을 관리하기 위한 표준 인프라를 제공하여, 프로젝트를 설치하거나 제거하는 모든 도구가 상호 운용될 수 있도록 하는 것입니다.
이 목표를 달성하기 위해 이 PEP는 시스템에 설치된 배포판을 설명하는 새로운 형식을 제안합니다. 또한 표준 라이브러리를 위한 참조 구현을 설명합니다.
과거에 설치 데이터베이스를 만들려는 시도가 있었습니다(참조: PEP 262).
현재 제안은 PEP 345와 결합하여 PEP 262를 대체합니다.
참고: 구현 계획이 예상대로 진행되지 않았으므로, 이 PEP에서는 정보 제공용으로만 간주해야 합니다.
근거
현재 Python에서 배포판을 설치하는 방식에는 두 가지 문제가 있습니다.
- 이를 수행하는 방법이 너무 많아서 상호 운용이 어렵습니다.
- 설치된 배포판에 대한 정보를 가져올 API가 없습니다.
배포판 설치 방식
현재 Python에 배포판을 설치할 때 각 요소가 서로 다른 디렉터리에 설치될 수 있습니다.
예를 들어 Distutils는 순수 Python 코드를 purelib 디렉터리에 설치하며, 이 디렉터리는 유닉스 계열 시스템과 Mac OS X에서는 lib/python2.6/site-packages이고, Windows에서는 Python 설치 디렉터리 아래의 Lib\site-packages입니다.
또한 Distutils install 명령의 install_egg_info 하위 명령은 프로젝트용 .egg-info 파일을 purelib 디렉터리에 추가합니다.
예를 들어 하나의 패키지와 추가 모듈 하나, 실행 가능한 스크립트를 포함하는 docutils 배포판의 경우 site-packages에 세 가지 요소가 설치됩니다.
docutils:docutils패키지입니다.roman.py:docutils에서 사용하는 추가 모듈입니다.docutils-0.5-py2.6.egg-info: PEP 314에 설명된 배포판 메타데이터가 포함된 파일입니다. 이 파일은sdist명령으로 빌드되는PKG-INFO라는 파일에 해당합니다.
rst2html.py와 같은 일부 실행 가능한 스크립트도 Python 설치의 bin 디렉터리에 추가됩니다.
setuptools라는 다른 프로젝트 [1]에는 배포판을 설치하기 위한 두 가지 다른 형식인 EggFormats [4]가 있습니다.
- 모든 배포판 파일과 배포판 메타데이터를
EGG-INFO라는 하위 디렉터리의PKG-INFO라는 파일에 포함하는 자체 완결형.egg디렉터리입니다.setuptools는 해당 디렉터리에 보완 메타데이터로 간주할 수 있는 다른 파일도 만듭니다. site-packages에 설치되는.egg-info디렉터리로,.egg형식의EGG-INFO에 있는 동일한 파일을 포함합니다.
첫 번째 형식은 distutils.core.setup 함수를 사용하는 대신 setup.py 파일에서 setuptools.setup 함수를 사용하는 배포판을 설치할 때 자동으로 사용됩니다.
setuptools도 배포판에 대한 참조를 easy-install.pth 파일에 추가합니다.
마지막으로 setuptools 프로젝트는 easy_install이라는 실행 가능한 스크립트 [2]를 제공하며, 이 스크립트는 distutils 기반 배포판을 포함한 모든 배포판을 자체 완결형 .egg 디렉터리에 설치합니다.
배포판에 독립형 .egg-info 디렉터리, 즉 두 번째 setuptools 형식을 사용하려면 setuptools 기반 배포판으로 작업하거나 easy_install 스크립트를 사용할 때 이를 강제해야 합니다. --single-version-externally-managed 옵션 또는 --root 옵션을 사용하여 이를 강제할 수 있습니다. 그러면 setuptools 프로젝트가 distutils와 같은 방식으로 프로젝트를 설치합니다.
이 옵션은 다음에 의해 사용됩니다:
제거 정보
Distutils는 uninstall 명령을 제공하지 않습니다. 배포본을 제거하려면 고급 사용자가 되어 설치된 여러 요소를 제거한 다음, 필요한 경우 정리하기 위해 .pth 파일을 살펴보아야 합니다.
또한 배포본을 설치하는 데 사용한 도구와 해당 배포본의 setup.py가 Distutils 또는 Setuptools를 사용하는지에 따라 과정이 달라집니다.
일부 상황에서는 모든 항목을 제거했는지, 또는 여러 배포본이 공유하는 파일을 제거하여 다른 배포본을 손상시키지 않았는지 확실히 알 수 없을 수도 있습니다.
그러나 공통적인 동작이 있습니다. 배포본을 설치하면 시스템에 파일이 복사됩니다. 또한 나중에 제거할 수 있도록 이러한 파일을 추적하는 것이 가능합니다.
더욱이 Pip 프로젝트에는 최근 uninstall 기능이 추가되었습니다. 이 기능은 install 명령의 record 옵션을 사용하여 설치된 모든 파일을 기록합니다.
이 PEP에서 제안하는 내용
이러한 문제를 해결하기 위해 이 PEP에서는 몇 가지 변경 사항을 제안합니다.
setuptools의EggFormats표준에 포함된 한 형식에서 영감을 받은, 디렉터리를 사용하는 새로운.dist-info구조입니다.- 설치된 배포본의 정보를 조회할 수 있도록
pkgutil에 새로운 API를 추가합니다. - Distutils에 제거 함수와 제거 스크립트를 추가합니다.
설치된 각 배포본마다 하나의 .dist-info 디렉터리
이 PEP에서는 EggFormats 표준의 옵션 중 하나에서 영감을 받은 설치 형식을 제안합니다. 이 옵션은 site-packages 디렉터리에 별도의 디렉터리를 배치하는 방식입니다.
이 별도의 디렉터리는 다음과 같이 명명합니다.:
name + '-' + version + '.dist-info'
이 .dist-info 디렉터리에는 다음 파일이 포함될 수 있습니다.
METADATA: PEP 345, PEP 314 및 PEP 241에 설명된 메타데이터를 포함합니다.RECORD: 설치된 파일 목록을 기록합니다.INSTALLER: 프로젝트 설치에 사용된 도구의 이름을 기록합니다.REQUESTED: 이 파일이 존재한다는 것은 프로젝트 설치가 명시적으로 요청되었음을 나타냅니다(즉, 종속 요소로 설치된 것이 아님을 나타냅니다).
METADATA, RECORD 및 INSTALLER 파일은 필수이지만 REQUESTED 파일은 없어도 됩니다.
표준 라이브러리에서는 Distutils를 제외하고 아직 메타데이터 파일을 사용하는 곳이 없으므로, 이 제안은 Python 자체에 영향을 주지 않습니다.
이 변경은 setuptools 및 pip 프로젝트에 영향을 미치지만, 이 프로젝트들은 이미 PKG-INFO 파일을 포함하는 디렉터리와 함께 작동하므로 중대한 영향은 없습니다.
RECORD
install 명령을 사용하여 소스 배포본을 설치할 때 설치 시점에 .dist-info 디렉터리 안에 RECORD 파일이 추가됩니다. bdist 명령 또는 bdist 기반 명령으로 생성된 바이너리 배포본을 설치할 때에도 RECORD 파일이 설치된다는 점에 유의하십시오. 이러한 명령은 바이너리 배포본을 생성할 때 install 명령을 사용하기 때문입니다.
RECORD 파일에는 설치된 파일 목록이 들어 있습니다. 이는 install 명령의 record 옵션으로 나열된 파일에 해당하며, 기본적으로 생성됩니다. 이를 통해 이 PEP의 뒷부분에서 설명하는 제거 기능을 구현할 수 있습니다. install 명령은 RECORD 파일이 기록되지 않도록 하는 옵션도 제공하며, 시스템 패키지를 만들 때 이 옵션을 사용해야 합니다.
타사 설치 도구도 사용자에게 묻거나 경고하지 않고 RECORD 파일에 없는 파일을 덮어쓰거나 삭제해서는 안 됩니다.
이 RECORD 파일은 PEP 262의 FILES에서 영감을 받았습니다.
RECORD 파일은 설치된 파일마다 한 줄의 레코드로 구성된 CSV 파일입니다. 다음 옵션과 함께 csv 모듈을 사용하여 파일을 읽습니다.
- 필드 구분자:
, - 인용 문자:
". - 줄 종결자:
os.linesep(즉\r\n또는\n)
배포 패키지가 설치되면 파일은 다음 위치에 설치될 수 있습니다.
- 기본 위치:
--install-lib옵션으로 정의되는 경로이며, 기본값은 site-packages 디렉터리입니다. - 설치 접두사:
--prefix옵션으로 정의되는 경로이며, 기본값은sys.prefix입니다. - 시스템의 다른 경로.
각 레코드는 세 요소로 구성됩니다.
- 파일의 경로
- 파일이 기본 위치에 있다면 기본 위치를 기준으로 한 ‘/’ 구분 상대 경로
- 파일이 설치 접두사에 있고 기본 위치가 설치 접두사의 하위 경로인 경우 기본 위치를 기준으로 한 ‘/’ 구분 상대 경로
- 로컬 플랫폼 구분자를 사용하는 절대 경로
- 파일 내용의 해시
pyc및pyo생성 파일에는 해시가 없다는 점에 유의하십시오. 이러한 파일은py파일에서 자동으로 생성되기 때문입니다. 따라서 해당py파일의 해시를 확인하는 것만으로 파일과 연결된pyc또는pyo파일이 변경되었는지 판단하기에 충분합니다.해시는 빈 문자열이거나
hashlib.algorithms_guaranteed에 명명된 해시 알고리즘 뒤에 등호 문자=가 오고, 이어서 다이제스트의 urlsafe-base64-nopad 인코딩이 오는 형식입니다 (끝의=를 제거한base64.urlsafe_b64encode(digest)). - 바이트 단위의 파일 크기
이 파일을 생성할 때 csv 모듈을 사용하므로 필드 구분자는 “,”입니다. 필드 안에 있는 모든 “,” 문자는 csv에 의해 자동으로 이스케이프됩니다.
파일을 읽을 때 U 옵션을 사용하여 범용 줄바꿈 지원(PEP 278 참조)을 활성화하므로, 다른 줄 종결자를 사용하는 플랫폼에서 생성된 파일을 읽을 때 발생할 수 있는 문제를 방지합니다.
다음은 RECORD 파일의 예시입니다(발췌).:
lib/python2.6/site-packages/docutils/__init__.py,md5=nWt-Dge1eug4iAgqLS_uWg,9544
lib/python2.6/site-packages/docutils/__init__.pyc,,
lib/python2.6/site-packages/docutils/core.py,md5=X90C_JLIcC78PL74iuhPnA,66188
lib/python2.6/site-packages/docutils/core.pyc,,
lib/python2.6/site-packages/roman.py,md5=7YhfNczihNjOY0FXlupwBg,234
lib/python2.6/site-packages/roman.pyc,,
/usr/local/bin/rst2html.py,md5=g22D3amDLJP-FhBzCi7EvA,234
/usr/local/bin/rst2html.pyc,,
python2.6/site-packages/docutils-0.5.dist-info/METADATA,md5=ovJyUNzXdArGfmVyb0onyA,195
lib/python2.6/site-packages/docutils-0.5.dist-info/RECORD,,
RECORD 파일에는 자기 자신의 해시를 포함할 수 없으며, 여기서는 언급만 된다는 점에 유의하십시오.
/etc/myapp에 config.ini 파일을 설치하는 프로젝트는 다음과 같이 추가됩니다.:
/etc/myapp/config.ini,md5=gLfd6IANquzGLhOkW4Mfgg,9544
Windows 플랫폼에서는 절대 경로에 드라이브 문자가 추가되므로, c:MyApp에 복사되는 파일은 다음과 같이 됩니다.:
c:\etc\myapp\config.ini,md5=gLfd6IANquzGLhOkW4Mfgg,9544
INSTALLER
install 명령에는 installer라는 새 옵션이 있습니다. 이 옵션은 설치를 호출하는 데 사용되는 도구의 이름입니다. 이는 [a-z0-9_\-\.]에 일치하는 정규화된 소문자 문자열입니다.
$ python setup.py install –installer=pkg-system
지정되지 않으면 기본값은 distutils입니다.
배포판이 설치되면, 누가 배포판을 설치했는지 추적하기 위해 이 값이 포함된 INSTALLER 파일이 .dist-info 디렉터리에 생성됩니다. 이 파일은 한 줄로 된 텍스트 파일입니다.
REQUESTED
일부 설치 도구는 충족되지 않은 의존성을 자동으로 감지하여 설치합니다. 이러한 경우에는 순전히 의존성으로 설치된 배포판을 추적하는 것이 유용하며, 나중에 해당 배포판이 의존하는 배포판을 제거하면 사용자에게 고아 의존성을 알릴 수 있습니다.
사용자가 직접 요청하여 배포판을 설치한 경우(일반적인 경우)에는 설치된 배포판의 .dist-info 디렉터리에 REQUESTED 파일이 추가됩니다. REQUESTED 파일은 비어 있을 수도 있고, “#” 문자로 시작하는 마커 주석 줄을 포함할 수도 있습니다.
설치 도구가 다른 배포판의 의존성으로 배포판을 자동 설치하는 경우에는 REQUESTED 파일을 생성하지 않아야 합니다.
distutils의 install 명령은 기본적으로 REQUESTED 파일을 생성합니다. 파일 생성 여부를 명시적으로 지정하기 위해 --requested 및 --no-requested 옵션을 허용합니다.
이미 의존성으로 시스템에 설치되어 있던 배포판을 나중에 이름으로 설치하면, distutils의 install 명령은 기존 설치의 .dist-info 디렉터리에 REQUESTED 파일을 생성합니다.
구현 세부 사항
참고: 이 절은 규범적이지 않습니다. 결국 이 PEP는 표준 라이브러리가 아니라 서드파티 라이브러리와 도구에 의해 구현되었습니다.
pkgutil의 새 함수와 클래스
.dist-info 디렉터리 콘텐츠를 사용하려면 표준 라이브러리에 API 집합을 추가해야 합니다. 이러한 API를 배치하기에 가장 적합한 곳은 pkgutil입니다.
함수
pkgutil 모듈에 추가된 새 함수는 다음과 같습니다:
distinfo_dirname(name, version)-> 디렉터리 이름name은 영숫자가 아닌 문자가 연속해서 나타나는 부분을 하나의 ‘-‘로 바꾸어 표준 배포판 이름으로 변환됩니다.version은 표준 버전 문자열로 변환됩니다. 공백은 마침표가 되고, 그 밖의 모든 영숫자가 아닌 문자(마침표 제외)는 대시가 되며, 여러 대시가 연속해서 나타나는 부분은 하나의 대시로 축약됩니다.그런 다음 두 속성은 파일 이름 이스케이프 형식으로 변환됩니다. 즉, ‘dist-info’에 있는 것과 이름과 버전 번호를 구분하는 하나를 제외한 모든 ‘-’ 문자가 ‘_’로 바뀝니다.
get_distributions()->Distribution인스턴스의 이터레이터sys.path에서.dist-info디렉터리를 찾고, 각 디렉터리에 해당하는Distribution인스턴스를 반환하는 이터레이터를 제공합니다.get_distribution(name)->Distribution또는 None입니다.obsoletes_distribution(name, version=None)->Distribution인스턴스의 이터레이터입니다.어떤 배포판이 obsolete
name을 폐기하는지 확인하기 위해 모든 배포판을 순회합니다.version이 제공되면 결과를 필터링하는 데 사용합니다.provides_distribution(name, version=None)->Distribution인스턴스의 이터레이터입니다.어떤 배포판이 provide
name을 제공하는지 확인하기 위해 모든 배포판을 순회합니다.version이 제공되면 결과를 필터링하는 데 사용합니다.sys.path의 모든 요소를 검사하고.dist-info로 끝나는 모든 디렉터리를 찾습니다.name메타데이터에 대해name과 일치하는 METADATA를 포함하는.dist-info디렉터리에 해당하는Distribution을 반환합니다.둘 이상의 값은 예상되지 않으므로 이 함수는 첫 번째 결과만 반환합니다. 디렉터리를 찾지 못하면 None을 반환합니다.
get_file_users(path)->Distribution인스턴스의 이터레이터입니다.모든 배포판을 순회하여 어떤 배포판이
path를 사용하는지 확인합니다.path는 로컬 절대 경로이거나 상대적인 ‘/’ 구분 경로일 수 있습니다.로컬 절대 경로는 ‘/’가 나타나는 부분을
os.sep로 지정된 시스템 구분자로 대체한 절대 경로입니다.
Distribution 클래스
생성자에 제공된 .dist-info 디렉터리의 경로를 사용하여 Distribution이라는 새 클래스가 생성됩니다. 인스턴스화될 때 METADATA에 포함된 메타데이터를 읽습니다.
Distribution(path) -> 인스턴스
지정된path에 대한Distribution인스턴스를 생성합니다.
Distribution은 다음 특성을 제공합니다.
name: 배포판의 이름입니다.metadata: 배포판의 METADATA 파일을 로드한DistributionMetadata인스턴스입니다.requested: REQUESTED 메타데이터 파일이 존재하는지 나타내는 불리언입니다(즉, 사용자의 요청으로 배포판이 설치되었는지를 나타냅니다).
또한 다음 메서드를 제공합니다.
get_installed_files(local=False)-> (path, hash, size)의 이터레이터입니다.RECORD항목을 순회하고 각 줄에 대해(path, hash, size)튜플을 반환합니다.local이True이면 경로를 로컬 절대 경로로 변환합니다. 그렇지 않으면RECORD의 원시 값을 반환합니다.로컬 절대 경로는 ‘/’가 나타나는 부분을
os.sep로 지정된 시스템 구분자로 대체한 절대 경로입니다.uses(path)-> 불리언입니다.path가RECORD에 나열되어 있으면True를 반환합니다.path는 로컬 절대 경로이거나 상대적인 ‘/’ 구분 경로일 수 있습니다.get_distinfo_file(path, binary=False)-> 파일 객체.dist-info디렉터리 아래에 있는 파일을 반환합니다.path가 가리키는 파일에 대한file인스턴스를 반환합니다.path는.dist-info디렉터리에 대한 ‘/’로 구분된 상대 경로이거나 절대 경로여야 합니다.path가 절대 경로이면서.dist-info디렉터리 경로로 시작하지 않으면DistutilsError가 발생합니다.binary가True이면 파일을 읽기 전용 바이너리 모드(rb)로 열고, 그렇지 않으면 읽기 전용 모드(r)로 엽니다.get_distinfo_files(local=False)-> 경로들의 이터레이터RECORD항목들을 순회하며, 경로가.dist-info디렉터리나 그 하위 디렉터리 중 하나에 있는 파일을 가리키는 경우 각 줄에 대한 경로를 반환합니다.local이True이면 각 경로는 로컬 절대 경로로 변환됩니다. 그렇지 않으면RECORD의 원본 값이 반환됩니다.
이 API는 디렉터리와 Zip 파일을 다루는 다섯 개의 클래스로 구성되어 있다는 점에 유의하십시오(따라서 Zip 파일에 포함된 파일에서도 동작합니다. 자세한 내용은 PEP 273을 참조하십시오). 관심 있는 독자를 위해 이 클래스들은 프로토타입 구현의 문서에 설명되어 있습니다 [7].
예제
docutils 예제와 함께 새 API 중 일부를 사용해 봅시다:
>>> from pkgutil import get_distribution, get_file_users, distinfo_dirname
>>> dist = get_distribution('docutils')
>>> dist.name
'docutils'
>>> dist.metadata.version
'0.5'
>>> distinfo_dirname('docutils', '0.5')
'docutils-0.5.dist-info'
>>> distinfo_dirname('python-ldap', '2.5')
'python_ldap-2.5.dist-info'
>>> distinfo_dirname('python-ldap', '2.5 a---5')
'python_ldap-2.5.a_5.dist-info'
>>> for path, hash, size in dist.get_installed_files()::
... print '%s %s %d' % (path, hash, size)
...
python2.6/site-packages/docutils/__init__.py,b690274f621402dda63bf11ba5373bf2,9544
python2.6/site-packages/docutils/core.py,9c4b84aff68aa55f2e9bf70481b94333,66188
python2.6/site-packages/roman.py,a4b84aff68aa55f2e9bf70481b943D3,234
/usr/local/bin/rst2html.py,a4b84aff68aa55f2e9bf70481b943D3,234
python2.6/site-packages/docutils-0.5.dist-info/METADATA,6fe57de576d749536082d8e205b77748,195
python2.6/site-packages/docutils-0.5.dist-info/RECORD
>>> dist.uses('docutils/core.py')
True
>>> dist.uses('/usr/local/bin/rst2html.py')
True
>>> dist.get_distinfo_file('METADATA')
<open file at ...>
>>> dist.requested
True
Distutils의 새 함수들
Distutils는 이미 배포판을 설치하는 매우 기본적인 방법을 제공하는데, 이는 배포판의 setup.py 스크립트에 대해 install 명령을 실행하는 것입니다.
Distutils2는 distutils2.util에 추가되는 매우 기본적인 uninstall 함수를 제공할 예정이며, 이 함수는 제거할 배포판의 이름을 인자로 받습니다. uninstall은 앞서 설명한 API들을 사용하여, 해시가 변경되지 않은 한 모든 고유 파일을 제거합니다. 그런 다음 남겨진 빈 디렉터리들을 제거합니다.
uninstall은 제거된 파일들의 목록을 반환합니다:
>>> from distutils2.util import uninstall
>>> uninstall('docutils')
['/opt/local/lib/python2.6/site-packages/docutils/core.py',
...
'/opt/local/lib/python2.6/site-packages/docutils/__init__.py']
배포판을 찾을 수 없으면 DistutilsUninstallError가 발생합니다.
필터링
uninstall의 동작 방식을 제어하고자 하는 서드파티 프로젝트를 위한 참조 API로 만들기 위해, 두 번째 호출 가능 객체 인자를 사용할 수 있습니다. 이는 제거되는 각 파일에 대해 호출됩니다. 호출 가능 객체가 True를 반환하면 파일이 제거됩니다. False를 반환하면 그대로 남겨집니다.
예제:
>>> def _remove_and_log(path):
... logging.info('Removing %s' % path)
... return True
...
>>> uninstall('docutils', _remove_and_log)
>>> def _dry_run(path):
... logging.info('Removing %s (dry run)' % path)
... return False
...
>>> uninstall('docutils', _dry_run)
물론 서드파티 도구는 자체 제거 기능을 구현하기 위해 더 낮은 수준의 pkgutil API를 사용할 수 있습니다.
설치자 마커
이 PEP에서 앞서 설명했듯이, install 명령은 .dist-info 디렉터리에 설치자의 이름이 담긴 INSTALLER 파일을 추가합니다.
다른 패키징 시스템으로 설치된 배포판이 제거되는 것을 방지하기 위해, uninstall 함수는 기본값이 distutils2인 installer라는 추가 인자를 받습니다.
호출되면 uninstall은 INSTALLER 파일이 이 인자와 일치하는지 확인합니다. 일치하지 않으면 DistutilsUninstallError를 발생시킵니다:
>>> uninstall('docutils')
Traceback (most recent call last):
...
DistutilsUninstallError: docutils was installed by 'cool-pkg-manager'
>>> uninstall('docutils', installer='cool-pkg-manager')
이를 통해 서드파티 애플리케이션이 uninstall 함수를 사용할 수 있으며, 다른 어떤 프로그램도 이전에 설치한 배포를 제거하지 않도록 강력히 권고합니다. 이는 Distutils API에 의존하는 서드파티 프로그램이 설치 시점에 시스템에 추가 작업을 수행하고, 제거 시점에 이를 되돌려야 할 때 유용합니다.
Uninstall 스크립트 추가하기
Distutils2에는 uninstall 스크립트가 추가되어 있으며, 다음과 같이 사용합니다:
$ python -m distutils2.uninstall projectname
이 스크립트는 어떤 배포의 제거가 다른 배포를 손상시키는지 여부를 제어하지 않는다는 점에 유의하십시오. 다만 uninstall 함수를 사용하여, 제거하는 모든 파일이 다른 배포에서 사용되고 있지 않은지는 확인합니다.
또한 이 uninstall 스크립트는 REQUESTED 메타데이터에 주의를 기울이지 않는다는 점에 유의하십시오. 이 메타데이터는 외부 도구가 더 발전된 의존성 관리를 제공하는 데에만 사용하도록 제공되는 것입니다.
하위 호환성과 로드맵
이러한 변경은 다음에 구현될 것이므로 어떠한 호환성 문제도 일으키지 않습니다:
- 새 함수가 추가된 pkgutil
- distutils2
계획은 이 PEP에서 제시한 기능을 Python 3.2용 pkgutil과 Distutils2에 포함시키는 것입니다.
Distutils2에는 새로운 pgkutil의 백포트도 포함될 예정이며, 2.4 버전부터 사용할 수 있습니다.
기존의 표준화 이전 형식을 사용하여 설치된 배포는 새 API에 필요한 메타데이터를 갖추고 있지 않으므로 무시됩니다. 서드파티 도구는 물론 전환을 쉽게 하기 위해 새 형식과 더불어 이전 형식도 계속 지원할 수 있습니다.
참고 자료
감사의 말
Jim Fulton, Ian Bicking, Phillip Eby, Rafael Villar Burke, 그리고 Pycon과 Distutils-SIG의 많은 분들.
Copyright
This document has been placed in the public domain.