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

Python 개선 제안 한국어 번역

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

Table of Contents

번역·라이선스 안내

이 비공식 한국어 번역은 원문 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)을 사용하여 전송됩니다.

업로드는 포트 80/tcp 상의 “www.python.org” 호스트로 이루어집니다(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 형식이어야 하며, 압축 해제 시 최상위 디렉터리(package-1.00/PKG-INFO)에 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-Reason 헤더가 있을 수 있으며, 이는 X-Swalow-Status에 대한 더 자세한 정보를 제공하는 사람이 읽을 수 있는 문자열을 포함합니다.

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 배포판이 포함되어 있습니다. 버전 관리 문제로 인해 이들은 분리되어야 하며, 한 시스템이 다른 유사 시스템에서 만들어진 배포판을 사용하는 것이 합리적인 경우 다운로드 클라이언트가 그 구분을 수행할 것으로 예상됩니다.

Version은 해당 릴리스에 대해 벤더가 지정한 공식 버전 문자열입니다. 예를 들어, “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 릴리스를 위한 카탈로그 시스템을 마무리하는 데 필요한 실제 데이터를 수집할 수 있는 플랫폼을 갖추게 되기를 바랍니다.