PEP 365 – pkg_resources 모듈 추가
- Author:
- Phillip J. Eby <pje at telecommunity.com>
- Status:
- Rejected
- Type:
- Standards Track
- Topic:
- Packaging
- Created:
- 30-Apr-2007
- Post-History:
- 30-Apr-2007
번역·라이선스 안내
이 비공식 한국어 번역은 원문 Copyright 절의 Public Domain 조건에 따라 제공합니다. 원저자와 공식 원문은 그대로 표시합니다. 수정되지 않은 기준 원문 · 공식 최신판
개요
이 PEP는 pkg_resources 모듈의 향상된 버전을 표준 라이브러리에 추가할 것을 제안합니다.
pkg_resources는 압축된 .egg 파일 내부의 것들을 포함하여 Python 패키지/버전 의존성을 찾고 관리하며 번들된 파일과 리소스에 접근하는 데 사용되는 모듈입니다. 현재 pkg_resources는 전체 setuptools 배포판을 설치해야만 사용할 수 있지만, setuptools의 다른 부분에는 의존하지 않습니다. 실제로 이것은 Python Egg를 위한 전체 런타임 지원 라이브러리를 이루고 있으며, 독립적으로도 유용합니다.
또한 기능 하나만 추가하면 이 모듈은 setuptools, workingenv, zc.buildout을 비롯한 여러 Python 패키지 관리 도구의 손쉬운 부트스트랩 설치를 지원할 수 있습니다.
제안
이 PEP는 setuptools를 표준 라이브러리에 포함시킬 것을 제안하는 대신, Python 2.6과 3.0에 pkg_resources만을 표준 라이브러리에 추가할 것을 제안합니다. pkg_resources는 지난 12개월 동안 새로운 기능이 거의 추가되지 않아 setuptools의 나머지 부분보다 상당히 안정적입니다.
그러나 이 PEP는 표준 라이브러리에 추가되기 전에 pkg_resources에 새로운 기능이 추가될 것도 함께 제안합니다. 구체적으로는 다음과 같은 형태가 가능해야 합니다:
python -m pkg_resources SomePackage==1.2
SomePackage를 PyPI에서 다운로드하여 설치하도록 요청합니다. 이 기능은 easy_install을 대체하는 것이 아닙니다. 대신 이 기능은 SomePackage가 PyPI XML-RPC API를 통해 다운로드용으로 등록된 순수 Python .egg 파일을 가지고 있다는 것에 의존하며, 해당 egg들은 $PYTHON_EGG_CACHE 디렉터리에 배치되어 기본적으로는 임포트할 수 없게 됩니다. (그리고 스크립트도 설치되지 않습니다.) 하지만 다운로드된 egg에 설치 부트스트랩 코드가 포함되어 있으면 그 코드가 실행될 기회를 얻게 됩니다.
이러한 제약들 덕분에 코드는 매우 단순하게 유지되면서도, 명령줄에 도구 이름만 지정하면 사용자가 setuptools, workingenv, zc.buildout같은 패키지 관리 도구를 다운로드할 수 있도록 지원할 만큼 충분히 강력해질 수 있습니다.
근거
많은 사용자들이 부트스트랩 과정을 거치는 번거로움을 덜기 위해 setuptools를 표준 라이브러리에 포함시켜 달라고 요청해 왔습니다. 하지만 부트스트랩 복잡성의 대부분은 setuptools가 이미 설치되어 있지 않으면 setuptools로 설치된 코드가 pkg_resources 런타임 모듈을 사용할 수 없다는 사실에서 비롯됩니다. 따라서 setuptools를 설치하려면 (어떤 의미에서는) setuptools가 이미 설치되어 있어야 합니다.
workingenv나 zc.buildout같은 다른 Python 패키지 관리 도구들도 둘 다 setuptools를 사용하면서도 사용자에게 “한 단계 설치”에 가까운 경험을 제공하고자 하기 때문에 비슷한 부트스트랩 문제를 안고 있습니다. pkg_resources가 이미 존재하고 PyPI에서 미리 패키징된 egg를 다운로드할 수도 있다면, 이러한 도구들 및 앞으로 등장할 다른 유사한 도구들을 위한 부트스트랩 유틸리티를 만드는 복잡성이 크게 줄어듭니다.
(이는 또한 egg를 빌드하는 것이 아니라 단순히 사용하기 위해서라면 setuptools를 설치할 필요가 없어진다는 것을 의미하기도 합니다.)
마지막으로, setuptools나 다른 패키징 도구를 통해 빌드된 egg에 대한 접근을 제공하는 것 외에도, Python 2.5부터는 distutils가 설치한 패키지 메타데이터(일명 PKG-INFO라 불리는) 파일을 pkg_resources가 읽어서 이미 sys.path에 있는 배포판이 무엇인지 식별할 수 있다는 점에 유의해야 합니다. Python 패키지가 (RPM과 같은) 시스템 패키지 도구를 사용해 설치되는 환경에서는, 해당 패키지들이 setuptools가 아니라 distutils를 통해 설치되었더라도 pkg_resources 모듈이 어떤 패키지의 어떤 버전이 설치되어 있는지 감지하는 API를 제공합니다.
구현 및 문서화
pkg_resources의 구현은 Python SVN 저장소의 /sandbox/trunk/setuptools/ 아래에서 관리되고 있습니다. pkg_resources.py와 pkg_resources.txt를 참고하십시오. pkg_resources가 지원하는 egg 형식에 대한 문서는 doc/formats.txt에서 찾을 수 있습니다. 이 문서들의 HTML 버전은 다음 위치에서 이용할 수 있습니다:
- http://peak.telecommunity.com/DevCenter/PkgResources 그리고
- http://peak.telecommunity.com/DevCenter/EggFormats
(이 HTML 버전은 setuptools 0.6을 대상으로 하며, Subversion 트렁크의 .txt 버전에 있는 모든 변경 사항을 반영하지 않을 수 있습니다.)
Copyright
This document has been placed in the public domain.