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

Python 개선 제안 한국어 번역

PEP 775 – CPython 빌드 시 zlib 필수화

Author:
Gregory P. Smith <greg at krypto.org>, Stan Ulbrych <stan at python.org>, Petr Viktorin <encukou at gmail.com>
Discussions-To:
Discourse thread
Status:
Withdrawn
Type:
Standards Track
Created:
24-Feb-2025
Python-Version:
3.14
Post-History:
23-Jan-2023, 01-Mar-2025

Table of Contents

번역·라이선스 안내

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

초록

zlib 압축 라이브러리 없이 CPython을 빌드하는 것은 더 이상 지원되지 않으며, zlib 모듈은 표준 라이브러리에서 필수가 됩니다. 유일한 예외는 WASI인데, 현재 WASI의 CPython에서는 zlib이 지원되지 않기 때문입니다. zlib 없이 인터프리터를 빌드하는 것이 여전히 가능할 수는 있지만, 공식적으로는 지원되지 않습니다.

PEP 철회

이 PEP는 2025-05-07에 저자들에 의해 철회되었습니다. 추가로 숙고한 끝에, 이 PEP가 충분한 가치를 제공하지 못했으며 특히 WASI에 대해 제안된 예외와 관련하여 상당한 부정적 피드백을 받았다는 것을 깨달았습니다.

동기

zlib Python 모듈의 기반이 되는 zlib 라이브러리는 WASI를 제외한 지원되는 모든 시스템에서 사용할 수 있습니다.

pip 설치 프로그램을 포함하여 PyPI의 많은 휠이 zlib을 필요로 합니다. pip 사용자는 zlib이 없는 CPython을 망가진 것으로 여기겠지만, CPython의 모든 주요 빌드가 zlib을 포함하고 있기 때문에 대부분 이를 알아차리지 못합니다.

CPython 개발자들도 사실상 알아차리지 못합니다. 이 글을 쓰는 시점에 적어도 하나의 CPython 테스트가 zlib 없이 실패한다는 것이 밝혀졌지만(test_peg_generator.test_c_parser의 “skip” 데코레이터가 너무 늦게 적용됩니다), 우리 CI는 이를 잡아내지 못했습니다.

이 PEP는 이것을 문서화와 안내의 문제로 다룹니다. 실제로 우리는 이미 zlib 없이 CPython을 빌드하는 것을 지원하지 않고 있으므로, 그렇다고 명시하기만 하면 됩니다.

근거

임베딩과 부트스트래핑처럼 zlib이 없는 빌드가 필요할 수 있는 사용 사례가 있으며, 예상하지 못한 사용 사례도 있을 수 있습니다. 따라서 zlib이 없는 시스템에 대한 지원을 제거하지는 않습니다. 대신 이를 지원되지 않는 것으로 표시하고, 영향을 받는 사용자에게 직접 테스트해 보거나 이 결정을 재고하게 할 만한 사용 사례를 공유해 달라고 요청합니다.

WASI 플랫폼에서는 아직 zlib이 기본적으로 사용되지 않는데, 이는 주로 그곳에서 zlib을 추가하는 것이 아직 우선순위가 아니었기 때문입니다. (WASI용 주요 “실사용” CPython 배포판인 Pyodide는 zlib을 포함하고 있다는 점에 유의하십시오.) 우리는 이를 zlib이 없는 플랫폼을 계속 테스트할 기회로 삼아, 아직은 지원되지 않는 빌드를 의도치 않게 망가뜨리지 않도록 합니다.

명세

선택적 기능에 zlib을 사용하는 표준 라이브러리 모듈에서는 해당 기능을 사용할 때 ImportError를 발생시킵니다. 더 “친절한” 오류 메시지를 생성하거나 zlib을 사용할 수 있는지 미리 확인하는 코드는 제거됩니다. zlib과 관련 없는 모든 기능은 zlib이 없어도 계속 사용할 수 있습니다.

이는 다음 모듈들과, 이들에 전이적으로 의존하는 그 밖의 모듈들에 영향을 미칩니다:

shutil.get_archive_formats()는 zlib이 없어서 사용할 수 없는 경우에도 항상 zip과 gztar를 등록된 형식으로 포함합니다.

configure 스크립트는 WASI 이외의 플랫폼에서 zlib을 찾지 못하면 경고를 표시합니다.

test_zlib은 WASI 이외의 플랫폼에서 실패합니다. 그 밖의 모든 테스트는 WASI, 지원되지 않는 빌드, 그리고 있을 수 있는 되돌리기를 위해 계속 건너뜁니다. 즉, @test.support.requires_zlib의 사용은 그대로 유지됩니다.

PEP 11은 “WASI를 제외한, zlib이 없는 시스템”을 지원하지 않는 것으로 표시하도록 수정될 것입니다.

하위 호환성

실제로는 오류 상황을 제외하면 크게 바뀌는 것이 없습니다. 예를 들어, zlib을 사용할 수 없는 상태에서 tar 압축을 사용하려고 하면 CompressionError가 아니라 ImportError가 발생합니다.

보안 영향

알려진 바 없습니다.

교육 방법

zlib은 관련된 모든 환경에서 이미 사용할 수 있으므로, 안내 내용을 바꿔야 할 필요는 없을 것으로 예상합니다.

참조 구현

참조 구현은 CPython 저장소에 올라온 풀 리퀘스트 python/cpython#130297에서 찾을 수 있습니다.

향후 작업

앞으로 zlib 없는 빌드의 사용 사례가 발견되지 않으면 zlib을 완전한 필수 요소로 만들 수 있습니다. 이를 위해 필요한 주요 변경 사항은 configure 스크립트가 치명적 오류를 발생시키도록 하는 것과 @test.support.requires_zlib를 제거하는 것입니다.