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

Python 개선 제안 한국어 번역

PEP 658 – 단순 저장소 API에서 배포 메타데이터 제공

Author:
Tzu-ping Chung <uranusjr at gmail.com>
Sponsor:
Brett Cannon <brett at python.org>
PEP-Delegate:
Donald Stufft <donald at stufft.io>
Discussions-To:
Discourse thread
Status:
Accepted
Type:
Standards Track
Topic:
Packaging
Created:
10-May-2021
Post-History:
10-May-2021
Resolution:
Discourse message

Table of Contents

번역·라이선스 안내

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

초록

이 PEP는 PEP 503의 “simple” 저장소 API에서 배포판의 METADATA 파일을 노출하는 앵커 태그를 추가할 것을 제안합니다. 지정된 배포판의 파일을 독립적으로 가져올 수 있음을 나타내기 위해 data-dist-info-metadata 속성을 도입합니다.

동기

최근 도구로 널리 사용되는 패키지 관리 작업 흐름으로 인해 배포판을 설치할 의도 없이 배포 메타데이터를 검사하고, 메타데이터를 바탕으로 선택하기 위해 프로젝트의 여러 배포판을 다운로드해야 할 필요성이 커지고 있습니다. 이로 인해 다운로드한 데이터의 상당 부분을 결국 폐기하게 되며, 이는 비효율적이고 사용자 경험을 저하시킵니다.

근거

도구에서는 HTTP 범위 요청으로 휠을 부분적으로 다운로드하여 다운로드 크기를 줄이는 방법을 모색해 왔습니다. 그러나 이 방법은 저장소 서버에 추가적인 런타임 요구 사항을 부과합니다. 또한 메타데이터 파일을 가져올 올바른 오프셋을 찾기 위해 휠의 파일 목록을 가져오는 별도의 요청이 필요하므로 여전히 추가 오버헤드가 발생합니다. 따라서 서버가 메타데이터 파일을 미리 추출하여 독립적인 파일로 제공하도록 함으로써 추가 요청과 ZIP 검사를 수행할 필요를 없애는 것이 바람직합니다.

[core-metadata]의 핵심 메타데이터 명세에 정의된 메타데이터 파일은 일반적인 사용 사례에 필요한 정보를 포함하므로 저장소에서 직접 제공합니다. 메타데이터는 휠 [wheel] 및 sdist [sdist]와 같은 표준 준수 배포판에 대해서만 제공해야 하며, 배포판의 정식 메타데이터 파일, 예를 들어 .dist-info 디렉터리 [dist-info]에 있는 휠의 METADATA 파일과 동일해야 합니다.

클라이언트가 별도로 제공되는 메타데이터 파일을 선택할 수 있는지를 나타내려면 배포 파일의 앵커 링크에 HTML 속성이 필요합니다. 이 속성은 클라이언트 측 검증을 위해 메타데이터 콘텐츠의 해시를 제공하는 데에도 사용됩니다. 속성이 없다는 것은 배포판의 콘텐츠 또는 저장소 지원 부족으로 인해 해당 배포판에 별도의 메타데이터 항목을 사용할 수 없음을 나타냅니다.

사양

단순 저장소의 프로젝트 페이지에서 배포판을 가리키는 각 앵커 태그는 data-dist-info-metadata 속성을 MAY가질 수 있습니다. 속성이 존재한다는 것은 앵커 태그로 나타낸 배포판이 처리 및/또는 설치될 때 수정되지 않는 핵심 메타데이터 파일을 MUST포함함을 나타냅니다.

data-dist-info-metadata 속성이 있으면 저장소는 배포판의 파일 이름 끝에 .metadata를 덧붙인 이름으로 배포판과 함께 배포판의 핵심 메타데이터 파일을 MUST제공해야 합니다. 예를 들어 /files/distribution-1.0-py3.none.any.whl에서 제공되는 배포판의 핵심 메타데이터는 /files/distribution-1.0-py3.none.any.whl.metadata에 위치합니다. 이는 PEP 503에서 GPG 서명 파일의 위치를 지정하는 방식과 유사합니다.

저장소는 data-dist-info-metadata속성 값으로 핵심 메타데이터 파일의 해시를 <hashname>=<hashvalue>구문을 사용하여 제공해야 SHOULD하며, 여기서 <hashname>은 사용된 해시 함수 이름을 소문자로 쓴 것이고 <hashvalue>는 16진수로 인코딩된 다이제스트입니다. 해시를 사용할 수 없는 경우 저장소는 속성 값으로 trueMAY사용할 수 있습니다.

하위 호환성

앵커 태그에 data-dist-info-metadata속성이 없으면 도구는 메타데이터를 검사하기 위해 배포판을 다운로드하던 현재 동작으로 되돌아갈 것으로 예상됩니다.

새로운 data-dist-info-metadata속성을 지원하지 않는 이전 도구는 해당 속성을 무시하고 메타데이터를 검사하기 위해 배포판을 다운로드하던 현재 동작을 유지할 것으로 예상됩니다. 이는 이전의 data-속성 추가가 기존 도구에 동일한 방식으로 동작할 것을 기대하는 것과 유사합니다.

거부된 아이디어

프로젝트 페이지에 메타데이터 콘텐츠 배치

도구는 일반적으로 프로젝트 페이지에서 이미 제공되는 정보에 더해 배포판의 의존성 정보만 필요하므로, 저장소가 PEP 503에서 지정한 data-requires-python속성처럼 프로젝트 페이지에 해당 정보를 직접 포함할 수 있다는 제안이 있었습니다.

이 접근 방식은 배포 패키지에 의존성 목록(필수 및 선택적 의존성 포함)이 얼마든지 길게 포함될 수 있고, 프로젝트의 모든 배포 패키지에 대한 정보를 포함하는 것이 순 절감으로 이어질지는 불분명하기 때문에 폐기되었습니다. 대부분의 배포 패키지에 대한 정보는 일반적으로 결국 필요하지 않게 되기 때문입니다. 메타데이터를 별도로 제공하면 데이터 사용량이 검사한 배포 패키지의 수에 더 비례하게 되므로 성능을 더 정확하게 추정할 수 있습니다.

배포 패키지에서 더 많은 파일을 노출합니다

메타데이터 파일만 제공하는 대신 전체 .dist-info 디렉터리를 별도의 부분으로 제공하자는 제안이 있었습니다. 그러나 HTTP를 통해 하나의 엔터티로 여러 파일을 제공하려면 저장소 서버가 원본 배포 패키지에서 파일을 추출한 후 이를 별도로 다시 아카이브해야 하며, 배포 패키지 자체를 설치하지 않을 때 METADATA이외의 파일에 대한 현재 사용 사례는 없습니다.

또한 여기서 취한 접근 방식이 향후 다른 파일이 도입되는 것을 배제하지 않는다는 점도 유의해야 합니다. 해당 파일을 함께 제공할지 개별적으로 제공할지는 관계없습니다.

프로젝트 페이지에서 메타데이터 파일의 URL을 명시적으로 지정합니다

이 초안의 초기 버전에서는 메타데이터 파일의 URL을 data-dist-info-metadata 속성에 넣도록 제안했습니다. 그러나 사람들이 파일을 더 쉽게 찾을 수 있도록 하려면 저장소가 정해진 위치에서 메타데이터 파일을 제공하도록 요구하는 편이 낫다고 생각합니다. 현재 접근 방식은 프로젝트 페이지를 더 작게 만들 수 있다는 추가적인 이점도 있습니다.

참조