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
번역·라이선스 안내
이 비공식 한국어 번역은 원문 Copyright 절의 Public Domain or CC0-1.0, whichever is more permissive 조건에 따라 제공합니다. 원저자와 공식 원문은 그대로 표시합니다. 수정되지 않은 기준 원문 · 공식 최신판
초록
zlib 압축 라이브러리 없이 CPython을 빌드하는 것은 더 이상 지원되지 않으며, 표준 라이브러리에 zlib 모듈이 필수로 포함되어야 합니다. 단, WASI에서는 현재 CPython의 zlib가 지원되지 않으므로 WASI는 유일한 예외입니다. zlib 없이 인터프리터를 빌드하는 것이 여전히 가능할 수 있지만, 공식적으로 지원되지 않습니다.
PEP 철회
이 PEP는 저자들에 의해 2025-05-07에 철회되었습니다. 추가로 숙고한 결과, 이 PEP가 충분한 가치를 제공하지 못했으며 상당한 부정적 피드백을 받았다는 사실을 깨달았습니다. 특히 WASI에 대해 제안된 예외와 관련하여 그러했습니다.
동기
zlib 라이브러리는 zlib Python 모듈을 구동하며, WASI를 제외한 모든 지원 시스템에서 사용할 수 있습니다.
PyPI의 많은 휠은 pip 설치 프로그램을 비롯하여 zlib를 필요로 합니다. pip 사용자는 zlib가 없는 CPython을 망가진 것으로 간주하겠지만, CPython의 모든 주요 빌드에 zlib가 포함되어 있으므로 대부분 이를 알아차리지 못합니다.
CPython 개발자들도 실제로는 이를 알아차리지 못합니다. 작성 시점에 zlib가 없으면 적어도 하나의 CPython 테스트가 실패하는 것으로 밝혀졌습니다(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 압축을 사용하려고 하면 ImportError를 발생시키며 CompressionError는 발생시키지 않습니다.
보안 관련 사항
알려진 사항이 없습니다.
이 내용을 가르치는 방법
zlib는 이미 모든 관련 컨텍스트에서 사용할 수 있으므로 지침을 변경할 필요는 없을 것으로 예상합니다.
참조 구현
참조 구현은 CPython 저장소의 풀 리퀘스트인 python/cpython#130297에서 확인할 수 있습니다.
향후 작업
향후 zlib가 없는 빌드에 대한 사용 사례가 발견되지 않으면 zlib를 완전히 필수로 지정할 수 있습니다. 이를 위해 필요한 주요 변경 사항은 configure 스크립트가 치명적 오류를 발생시키도록 만들고 @test.support.requires_zlib를 제거하는 것입니다.
Copyright
This document is placed in the public domain or under the CC0-1.0-Universal license, whichever is more permissive.