[Rejected] PEP 641 - Using an underscore in the version portion of Python 3.10 compatibility tags
원문 링크: PEP 641 - Using an underscore in the version portion of Python 3.10 compatibility tags
상태: Rejected 유형: Standards Track 작성일: 20-Oct-2020
PEP 641: Python 3.10 호환성 태그 버전 부분에 언더스코어 사용
- 작성자: Brett Cannon, Steve Dower, Barry Warsaw
- PEP 대리인: Pablo Galindo
- 상태: 거절됨 (Rejected)
- 유형: Standards Track
- 생성일: 2020년 10월 20일
- Python 버전: 3.10
- 해결: Discourse 메시지
개요 (Abstract)
참고: 이 PEP는 커뮤니티 내 잠재적인 문제 발생 가능성으로 인해 거절되었습니다.
PEP 425에 명시된 태그 시스템(주로 휠(wheel) 파일 이름에 사용됨)에 따라, 각 Python 릴리스는 호환성 태그(예: CPython 3.9의 경우 cp39
, py39
)를 지정합니다. 이 PEP는 CPython 3.10의 경우 태그의 버전 부분에 3_10
을 사용하는 것을 제안했습니다(기존 310
대신).
동기 (Motivation)
지금까지 휠 파일 이름 등에 사용되는 호환성 태그의 버전 부분은 Python의 주(major) 버전과 부(minor) 버전을 단순히 연결한 것이었습니다. 이는 CPython 인터프리터 태그와 일반적인, 인터프리터에 독립적인 태그(예: 각각 cp39
및 py39
) 모두에 적용되었습니다. ABI 태그(예: cp39
)에도 동일하게 적용됩니다. 주 버전과 부 버전이 모두 한 자리 숫자였기 때문에, 예를 들어 39
에서 어떤 숫자가 무엇을 나타내는지 모호함이 없었습니다.
하지만 Python 3.10부터는 310
이 Python 버전이 3.10
인지, 31.0
인지, 또는 주 버전만 310
인지를 명확하게 구분하지 못하여 모호성이 발생합니다. 따라서 PEP 425에서 허용하는 대로 주/부 버전 부분을 3_10
으로 분리하여 지원되는 Python 버전을 명확히 하는 것을 제안했습니다.
근거 (Rationale)
3_10
을 사용하는 것은 PEP 425의 제약 사항이었으며, 따라서 3_10
또는 310
중 하나만 선택할 수 있었습니다.
명세 (Specification)
이 제안이 수락되었다면, SOABI
configure 변수와 sysconfig.get_config_var('py_version_nodot')
이 3_10
을 적절하게 사용하도록 업데이트되었을 것입니다.
하위 호환성 (Backwards Compatibility)
packaging
프로젝트에 의존하는 도구들은 이미 Python 3.10에 대해 3_10
버전 지정을 예상하고 있었습니다. 버전 지정자를 310
으로 유지하려면 해당 변경 사항을 되돌리고 의존하는 프로젝트(예: pip
)를 업데이트해야 했을 것입니다.
3_10
으로 전환하는 것은 부 버전이 한 자리 숫자라는 관례에 암묵적으로 의존하는 모든 도구에 영향을 미쳤을 것입니다. 그러나 이러한 도구들은 이 변경 사항과 관계없이 이미 문제가 있었습니다.
주 버전이 첫 번째 숫자라고 가정하는 도구의 경우, 3_10
으로 전환했다면 업데이트가 필요했을 것입니다.
비-로케일 ASCII에서 언더스코어(_
)는 모든 숫자 뒤에 정렬되므로, 휠 파일 이름의 Python 버전별 정렬과 일치하는 사전식 정렬은 유지되었을 것입니다.
PEP 515(Python 3.6) 이후로 숫자 리터럴의 언더스코어는 무시됩니다. 즉, int("3_10")
과 int("310")
은 동일한 결과를 생성하며, 정수로 변환을 기반으로 한 순서는 유지되었을 것입니다. 그러나 이것은 태그를 정렬하는 좋지 않은 방법이며, 이 제안이 상황을 더 나쁘게 만들지 않는다는 것을 보여주기 위해 언급된 것입니다.
보안 영향 (Security Implications)
알려진 보안 문제는 없습니다.
교육 방법 (How to Teach This)
인터프리터 태그의 사용은 주로 기계 기반이며 이 PEP는 모호성을 해소하는 역할을 하므로, 특별한 교육 고려 사항은 필요하지 않을 것입니다.
참조 구현 (Reference Implementation)
CPython 3.10에 대한 지원을 추가하는 Pull Request는 이미 존재했습니다. 이 제안된 PEP를 사용하는 휠 파일을 읽기 위한 지원은 이미 구현되어 있었습니다.
거절된 아이디어 (Rejected Ideas)
변경하지 않기 (Not making the change)
태그를 변경하지 않고 310
을 유지하는 것이 고려되었습니다. 이 주장은 작업량이 적고 기존 도구에 문제를 일으키지 않을 것이라는 것이었습니다. 그러나 결국 모호성을 해소하는 것이 더 낫다고 판단되었습니다.
열린 문제 (Open Issues)
얼마나 멀리까지 적용해야 하는가? (How far should we take this?)
주 버전과 부 버전이 사용되는 다른 곳(예: .pyc
파일, 표준 라이브러리의 zip 파일 import 경로)도 언더스코어를 사용하도록 업데이트될 수 있었습니다. 이를 광범위하게 적용하는 것이 얼마나 유용할지는 알려지지 않았습니다.
두 자리 부 버전 숫자로 표준화하기 (Standardizing on double digit minor version numbers)
주 버전과 부 버전의 시작/끝을 명확히 하기 위해 부 버전을 항상 두 자리 숫자로 강제하고 필요한 경우 0으로 채우는 대안적인 제안이 있었습니다. 이것의 장점은 현재 cp310
인터프리터 태그를 정확하게 만들고, 따라서 문제 발생을 최소화한다는 것입니다. 또한 앞으로도 차별화를 제공합니다.
하지만 몇 가지 단점도 있습니다. 하나는 부 버전 숫자가 두 자리라는 것을 알아야만 모호성 해소가 가능하다는 것입니다. 기본 지식과 관계없이 모호함이 없는 cp3_10
과 비교해보세요. 또한 세 자리 부 버전 숫자의 잠재성은 이 두 자리 요구 사항으로 해결되지 않습니다.
과거, 현재 또는 미래에 이 관행을 따르지 않는 다른 인터프리터에 대한 문제도 있습니다. 예를 들어, 이 규칙이 잘못될 수 있는 다른 인터프리터에 대해 이전에 세 자리 버전 부분을 사용한 사람이 있는지 알려져 있지 않습니다. 이 변경은 현재 한 자리 부 버전을 가진 인터프리터(예: PyPy 7.3)가 pp73
에서 pp703
으로 변경하거나 다음 부 릴리스부터 변경(예: 7.4 또는 8.0)해야 함을 시사했을 것입니다. 그렇지 않으면 이 규칙이 cp
인터프리터 유형에만 한정되어 사람들에게 더 혼란을 주었을 것입니다.
⚠️ 알림: 이 문서는 AI를 활용하여 번역되었으며, 기술적 정확성을 보장하지 않습니다. 정확한 내용은 반드시 원문을 확인하시기 바랍니다.
Comments