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

Python 개선 제안 한국어 번역

PEP 641 – Python 3.10 호환성 태그의 버전 부분에 밑줄 사용

Author:
Brett Cannon <brett at python.org>, Steve Dower <steve.dower at python.org>, Barry Warsaw <barry at python.org>
PEP-Delegate:
Pablo Galindo Salgado <pablogsal at python.org>
Discussions-To:
Discourse thread
Status:
Rejected
Type:
Standards Track
Created:
20-Oct-2020
Python-Version:
3.10
Post-History:
21-Oct-2020
Resolution:
Discourse message

Table of Contents

번역·라이선스 안내

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

초록

Note

이 PEP는 커뮤니티 생태계가 손상될 가능성 때문에 거부되었습니다.

주로 wheel 파일 이름에 사용되는 PEP 425에 명시된 태그 시스템을 사용하여, 각 Python 릴리스는 호환성 태그를 지정합니다(예: CPython 3.9의 경우 cp39, py39). 이 PEP는 CPython 3.10의 태그 버전 부분에 310 대신 3_10 사용을 제안합니다.

동기

지금까지 wheel 파일 이름 등에 사용되는 호환성 태그의 버전 부분은 CPython 인터프리터 태그와 인터프리터에 구애받지 않는 일반 인터프리터 태그 모두에서 Python의 주 버전과 부 버전을 그대로 이어 붙인 형태였습니다(예: 각각 cp39py39). 이는 ABI 태그에도 적용됩니다(예: cp39). 주 버전과 부 버전이 모두 한 자리 숫자였으므로, 예를 들어 39에서 각 숫자가 무엇을 나타내는지 명확했습니다.

그러나 Python 3.10부터는 310이 Python 버전 3.10, 31.0, 또는 주 버전만으로 표시된 310 중 무엇을 뜻하는지 명확히 구분하지 못하므로 모호성이 발생합니다. 따라서 PEP 425에서 허용하는 대로 3_10을 사용하여 주 버전과 부 버전 부분을 구분하면 지원되는 Python 버전의 모호성이 해소됩니다.

근거

다른 제안된 구분자 대신 3_10을 사용하는 것은 PEP 425의 제한이므로, 선택지는 3_10 또는 310뿐입니다.

명세

SOABI 설정 변수와 sysconfig.get_config_var('py_version_nodot')3_10을 적절히 사용하도록 업데이트됩니다.

하위 호환성

‘packaging’ 프로젝트 [2]에 의존하는 도구는 이미 Python 3.10의 버전 명세로 3_10을 예상합니다. 버전 지정자를 310으로 유지하려면 해당 변경 사항을 되돌리고 종속 프로젝트(예: pip)를 업데이트해야 합니다.

3_10으로 전환하면 부 버전이 한 자리 숫자라는 관례에 암묵적으로 의존하는 모든 도구에 영향을 미칩니다. 하지만 이러한 도구는 여기에서 어떤 변경을 하든 이미 제대로 작동하지 않습니다.

주 버전이 첫 번째 숫자 하나뿐이라고 가정하는 도구는 3_10으로 전환할 경우 업데이트해야 합니다.

로케일을 사용하지 않는 ASCII에서 _는 모든 숫자 뒤에 정렬되므로, 휠 파일 이름을 Python 버전순으로 정렬한 결과와 일치하는 사전식 정렬이 유지됩니다.

Python 3.6의 PEP 515 이후 숫자 리터럴의 밑줄은 무시됩니다. 이는 int("3_10")int("310")이 동일한 결과를 생성하며, 정수 변환을 기반으로 한 순서가 유지됨을 의미합니다. 그러나, 이는 여전히 태그를 정렬하는 나쁜 방법이며, 여기서 이 점을 언급하는 이유는 단지 이 제안이 상황을 더 악화시키지 않음을 보여 주기 위해서입니다.

보안 영향

알려진 보안 우려 사항은 없습니다.

교육 방법

인터프리터 태그는 대부분 기계가 사용하며 이 PEP가 모호성을 해소하므로, 특별히 고려해야 할 교육 사항은 없습니다.

참조 구현

CPython 3.10 지원을 추가하는 풀 리퀘스트 [1]가 이미 존재합니다. 이 PEP에서 제안하는 방식으로 휠 파일을 읽는 기능은 이미 구현되어 있습니다.

거부된 아이디어

변경하지 않음

태그를 변경하지 않고 310을 유지하는 방안이 고려되었습니다. 작업량이 적고 기존 도구가 손상되지 않는다는 주장이었습니다. 그러나 결국에는 중의성을 해소하는 편이 낫다고 판단되었습니다.

미해결 쟁점

이를 어디까지 적용해야 합니까?

메이저 및 마이너 버전이 사용되는 다른 곳도 밑줄을 사용하도록 업데이트할 수 있습니다(예: .pyc 파일, 표준 라이브러리용 zip 파일의 임포트 경로). 이를 전반적으로 적용하는 것이 얼마나 유용할지는 알려져 있지 않습니다.

두 자리 마이너 버전 번호로 표준화

마이너 버전이 항상 두 자리가 되도록 강제하고 필요에 따라 0을 덧붙여 메이저 및 마이너 버전이 시작하고 끝나는 지점을 명확히 구분하자는 대안이 제안되었습니다. 이 방안의 장점은 현재의 cp310 인터프리터 태그를 정확하게 만들어 손상을 최소화한다는 것입니다. 또한 앞으로도 버전을 구분할 수 있습니다.

하지만 몇 가지 단점이 있습니다. 한 가지는 마이너 버전 번호가 두 자리라는 사실을 알고 있는 경우에만 중의성이 해소된다는 점입니다. 이는 사전 지식과 관계없이 명확한 cp3_10과 비교됩니다. 세 자리 마이너 버전 번호가 사용될 가능성도 이 두 자리 요건으로는 다루지 못합니다.

또한 다른 인터프리터가 과거, 현재 또는 미래에 이 관행을 따르지 않을 수 있다는 문제도 있습니다. 예를 들어, 이 규칙이 올바르지 않은 다른 인터프리터에 대해 이전에 다른 사람이 인터프리터 태그의 버전 부분을 세 자리로 사용했는지는 알려져 있지 않습니다. 또한 이 변경은 현재 마이너 버전이 한 자리인 인터프리터 – 예: PyPy 7.3 – 가 pp73에서 pp703으로 변경하거나 다음 마이너 릴리스부터(예: 7.4 또는 8.0) 전환해야 함을 시사합니다. 그렇지 않으면 이 규칙은 cp 인터프리터 유형에만 적용되어 사람들이 더 혼란스러워할 수 있습니다.

참고 문헌