PEP 243 – 모듈 저장소 업로드 메커니즘
- Author:
- Sean Reifschneider <jafo-pep at tummy.com>
- Discussions-To:
- Distutils-SIG list
- Status:
- Withdrawn
- Type:
- Standards Track
- Topic:
- Packaging
- Created:
- 18-Mar-2001
- Python-Version:
- 2.1
- Post-History:
- 20-Mar-2001, 24-Mar-2001
번역·라이선스 안내
이 비공식 한국어 번역은 원문 Copyright 절의 Public Domain 조건에 따라 제공합니다. 원저자와 공식 원문은 그대로 표시합니다. 수정되지 않은 기준 원문 · 공식 최신판
초록
모듈 저장소 시스템(Perl의 CPAN 등)이 성공하려면 모듈 작성자가 자신의 작업물을 최대한 쉽게 제출할 수 있어야 합니다. 이 제출이 이루어질 자연스러운 위치는 배포 아카이브가 성공적으로 생성된 후의 Distutils 도구입니다. 예를 들어, 모듈 작성자는 자신의 소프트웨어를 테스트한 후(setup.py sdist의 결과를 확인한 후) setup.py sdist --submit을 입력할 수 있습니다. 이렇게 하면 Distutils가 소스 배포판을 아카이브 서버에 제출하도록 플래그가 지정되어, 아카이브에 포함되고 미러로 배포됩니다.
이 PEP는 소프트웨어 배포판을 아카이브에 제출하는 메커니즘만을 다루며, 실제 아카이브/카탈로그 서버는 다루지 않습니다.
업로드 과정
업로드에는 Distutils PKG-INFO 메타데이터 정보(PEP 241에 명시된 대로), 실제 소프트웨어 배포판, 그리고 기타 선택적 정보가 포함됩니다. 이 정보는 일반적인 HTML 파일 업로드 요청과 동일하게 인코딩된 멀티파트 폼으로 업로드됩니다. 이 폼은 ENCTYPE="multipart/form-data" 인코딩(RFC 1867)을 사용하여 전송됩니다.
업로드는 호스트 “www.python.org”의 80/tcp 포트로 이루어집니다(POST http://www.python.org:80/pypi). 폼은 다음 필드로 구성됩니다.
distribution– 모듈 소프트웨어를 담은 파일입니다(예:.tar.gz또는.zip파일).distmd5sum– 업로드된 배포판의 MD5 해시로, 다이제스트의 16진수 표현을 ASCII로 인코딩한 것입니다(for byte in digest: s = s + ('%02x' % ord(byte))).pkginfo(선택 사항) – 배포 메타데이터를 담은 파일입니다(PEP 241에 명시된 대로). 이 필드가 포함되지 않으면 배포 파일은.tar형식(gzip 및 bzip 압축 허용) 또는.zip형식이어야 하며, 압축을 풀었을 때 나오는 최상위 디렉터리에PKG-INFO파일이 있어야 한다는 점에 유의하십시오(package-1.00/PKG-INFO).infomd5sum(pkginfo 필드가 있는 경우 필수) – 업로드된 메타데이터의 MD5 해시로, 다이제스트의 16진수 표현을 ASCII로 인코딩한 것입니다(for byte in digest: s = s + ('%02x' % ord(byte))).platform(선택 사항) – 이 배포판의 대상 플랫폼을 나타내는 문자열입니다. 이 필드는 바이너리 배포판에만 해당합니다. 이 문자열은<os_name>-<os_version>-<platform architecture>-<python version>형식으로 인코딩됩니다.signature(선택 사항) – 작성자가 서명한, 업로드된 배포판의 OpenPGP 호환 서명입니다. 카탈로그 시스템은 이 서명을 사용하여 업로드 승인을 자동화할 수 있습니다.protocol_version– 클라이언트가 지원하는 프로토콜 버전을 나타내는 문자열입니다. 이 문서는 프로토콜 버전 “1”을 설명합니다.
반환 데이터
업로드 상태는 HTTP 비표준(X-*) 헤더를 사용하여 보고됩니다. X-Swalow-Status 헤더는 다음 값을 가질 수 있습니다.
SUCCESS– 업로드가 성공했음을 나타냅니다.FAILURE– 어떤 이유로 업로드를 처리할 수 없습니다.TRYAGAIN– 서버가 현재 업로드를 받아들일 수 없지만, 클라이언트는 나중에 다시 시도해야 합니다. 그 원인으로는 서버의 자원 부족, 관리를 위한 서비스 중단 등이 있을 수 있습니다.
선택적으로, X-Swalow-Status에 대한 더 자세한 정보를 제공하는, 사람이 읽을 수 있는 문자열을 담은 X-Swalow-Reason 헤더가 있을 수 있습니다.
X-Swalow-Status 헤더가 없거나 이 헤더에 위의 세 문자열 중 하나가 들어 있지 않으면, 일시적인 실패로 처리해야 합니다.
예시:
>>> f = urllib.urlopen('http://www.python.org:80/pypi')
>>> s = f.headers['x-swalow-status']
>>> s = s + ': ' + f.headers.get('x-swalow-reason', '<None>')
>>> print s
FAILURE: Required field "distribution" missing.
샘플 양식
업로드 클라이언트는 다음 양식이 주어졌을 때 Linux용 Netscape Navigator 4.76 버전이 만들어 내는 것과 같은 형식으로 페이지를 제출해야 합니다.:
<H1>Upload file</H1>
<FORM NAME="fileupload" METHOD="POST" ACTION="pypi"
ENCTYPE="multipart/form-data">
<INPUT TYPE="file" NAME="distribution"><BR>
<INPUT TYPE="text" NAME="distmd5sum"><BR>
<INPUT TYPE="file" NAME="pkginfo"><BR>
<INPUT TYPE="text" NAME="infomd5sum"><BR>
<INPUT TYPE="text" NAME="platform"><BR>
<INPUT TYPE="text" NAME="signature"><BR>
<INPUT TYPE="hidden" NAME="protocol_version" VALUE="1"><BR>
<INPUT TYPE="SUBMIT" VALUE="Upload">
</FORM>
플랫폼
다음은 유효한 os 이름입니다.:
aix beos debian dos freebsd hpux mac macos mandrake netbsd
openbsd qnx redhat solaris suse windows yellowdog
위 목록에는 여러 종류의 Linux 배포판이 포함되어 있습니다. 버전 관리 문제 때문에 이들은 따로 구분해야 하며, 한 시스템에서 다른 유사한 시스템에서 만들어진 배포본을 사용하는 것이 합리적인 경우에는 다운로드 클라이언트가 그 구분을 처리할 것으로 예상합니다.
버전은 해당 릴리스에 대해 벤더가 지정한 공식 버전 문자열입니다. 예를 들어, “2000”과 “nt”(Windows), “9.04”(HP-UX), “7.0”(RedHat, Mandrake) 등이 있습니다.
다음은 유효한 아키텍처입니다.:
alpha hppa ix86 powerpc sparc ultrasparc
상태
현재 개념 증명 수준의 클라이언트와 서버를 구현해 두었습니다. 2.1 릴리스에 맞춰 Distutils 패치를 준비할 계획입니다. 배포 메타데이터를 지정하기 위한 Andrew의 PEP 241과 함께, 2.2 릴리스를 위한 카탈로그 시스템을 확정하는 데 필요한 실제 데이터를 수집할 수 있는 플랫폼을 갖추기를 바랍니다.
Copyright
This document has been placed in the public domain.