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

Python 개선 제안 한국어 번역

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

Table of Contents

번역·라이선스 안내

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

초록

이 PEP는 pkg_resources 모듈의 개선된 버전을 표준 라이브러리에 추가할 것을 제안합니다.

pkg_resources는 Python 패키지/버전 의존성을 찾고 관리하며, 압축된 .egg 파일 내부에 있는 것을 포함하여 번들된 파일과 리소스에 접근하는 데 사용되는 모듈입니다. 현재 pkg_resources는 setuptools 배포판 전체를 설치해야만 사용할 수 있지만, setuptools의 다른 어떤 부분에도 의존하지 않습니다. 사실상 이 모듈은 Python Egg를 위한 런타임 지원 라이브러리 전체를 이루며, 독립적으로도 유용합니다.

또한 기능 하나만 추가하면, 이 모듈은 setuptools, workingenv, zc.buildout을 비롯한 여러 Python 패키지 관리 도구의 손쉬운 부트스트랩 설치를 지원할 수 있습니다.

제안

이 PEP는 setuptools를 표준 라이브러리에 포함하자고 제안하는 대신, Python 2.6과 3.0의 표준 라이브러리에 pkg_resources만 추가할 것을 제안합니다. pkg_resources는 setuptools의 나머지 부분보다 훨씬 안정적이며, 지난 12개월 동안 새로운 기능이 거의 추가되지 않았습니다.

하지만 이 PEP는 새로운 기능을 표준 라이브러리에 추가하기 전에 먼저 pkg_resources에 추가할 것도 제안합니다. 구체적으로는, 다음과 같은 방법으로:

python -m pkg_resources SomePackage==1.2

PyPI에서 SomePackage를 다운로드하고 설치하도록 요청할 수 있어야 합니다. 이 기능은 easy_install을 대체하는 것이 아닙니다. 대신 이 기능은 SomePackage에 PyPI XML-RPC API를 통해 다운로드할 수 있도록 등록된 순수 Python .egg 파일이 있다는 전제에 의존하며, egg는 $PYTHON_EGG_CACHE 디렉터리에 배치되고, 그곳에서는 기본적으로 임포트할 수 없습니다. (또한 스크립트도 설치되지 않습니다.) 그러나 다운로드한 egg에 설치 부트스트랩 코드가 포함되어 있다면, 그 코드가 실행될 기회가 주어집니다.

이러한 제약 덕분에 코드는 매우 단순하게 유지되면서도, 사용자가 명령줄에서 도구의 이름을 지정하기만 하면 setuptools, workingenv, zc.buildout 같은 패키지 관리 도구를 다운로드할 수 있도록 지원할 만큼 충분히 강력합니다.

근거

많은 사용자가 setuptools를 부트스트랩하는 번거로운 과정을 거치지 않아도 되도록 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 버전은 다음 주소에서 볼 수 있습니다:

(이 HTML 버전들은 setuptools 0.6용이므로, Subversion 트렁크의 .txt 버전에 있는 변경 사항을 모두 반영하지 않을 수 있습니다.)