PEP 477 – Python 2.7에 ensurepip(PEP 453) 백포트
- Author:
- Donald Stufft <donald at stufft.io>, Alyssa Coghlan <ncoghlan at gmail.com>
- BDFL-Delegate:
- Benjamin Peterson <benjamin at python.org>
- Status:
- Final
- Type:
- Standards Track
- Created:
- 26-Aug-2014
- Post-History:
- 01-Sep-2014
- Resolution:
- Python-Dev message
번역·라이선스 안내
이 비공식 한국어 번역은 원문 Copyright 절의 Public Domain 조건에 따라 제공합니다. 원저자와 공식 원문은 그대로 표시합니다. 수정되지 않은 기준 원문 · 공식 최신판
초록
이 PEP는 PEP 453에 의해 Python 3.4에 추가된 ensurepip 모듈을 Python 2.7에 백포트할 것을 제안합니다. 또한 Python 2.7의 Windows 및 OSX 설치 프로그램에 ensurepip의 자동 호출을 추가할 것을 제안합니다. 그러나 Makefile에 자동 호출을 추가하는 것은 제안하지 않습니다.
또한 패키지 배포 및 설치 가이드의 문서 변경 사항을 3.4의 문서와 일치하도록 갱신할 것을 제안합니다. 3.4의 문서는 설치 프로그램을 부트스트랩하기 위해 ensurepip 모듈을 사용하는 방법을 언급합니다.
근거
Python 2.7은 사실상 2.x 계열의 끝을 나타내는 Python의 LTS 릴리스이며, 여전히 Python 2.7을 주 버전으로 사용하는 사용자층이 매우 큽니다. 이러한 사용자들은 더 넓은 Python 생태계에 참여하기 위해 패키징 도구를 부트스트랩하는 올바른 방법을 직접 찾아 나서야 합니다.
이 PEP는 최종 사용자가 더 넓은 Python 생태계에 최대한 쉽게 참여할 수 있도록 하는 것이 다음 세 가지 주요 이유에서 중요하다고 봅니다:
- Python 2.x에서 3.x로의 마이그레이션에는 여러 가지 어려운 점이 있으며, six [1], modernize [2], future [3] 같은 여러 서드파티 모듈이 이를 완화해 줍니다. 그러나 이러한 도구에 의존하려면 프로젝트를 사용하는 모든 사람이 이 패키지들을 설치할 도구를 갖추고 있어야 합니다.
- Python 2.x에서 3.x로의 마이그레이션을 돕는 도구 외에도, Python 3에서 새로 추가되었으며 PyPI에서 백포트를 구할 수 있는 모듈도 많이 있습니다. 이는 사람들이 2.x와 3.x 모두와 호환되는 소프트웨어를 작성하는 데 도움이 될 뿐만 아니라, Python 2에서도 Python 3의 새로운 기능 일부를 사용할 수 있게 해 줍니다.
- 사용자는 또한 제안되고 있는 새로운 표준을 따르는 Python 패키지를 만들기 위해 여러 도구가 필요할 것입니다. setuptools [4], Wheel [5], twine [6] 같은 도구들은 더 안전하고 빠르며 신뢰할 수 있는 패키징 도구 체인을 가능하게 하고 있습니다. 사람들이 먼저 패키지 관리자를 찾아 설치하는 방법부터 안내받아야 한다면, 이러한 도구들은 사용하기 어려울 수 있습니다.
- Python의 가장 큰 강점 중 하나는 그 위에 구축된 라이브러리와 프로젝트로 이루어진 거대한 생태계이며, 그 대부분은 PyPI를 통해 배포됩니다. 그러나 이 넓은 생태계의 혜택을 실질적으로 누리려면, 최종 사용자(그중 일부는 처음 접하는 사용자일 것입니다)가 먼저 어떤 패키지 관리자를 구할지, 그것을 어떻게 구할지 결정하고, 마지막으로 실제로 설치까지 해야 합니다.
더 나아가, Python의 대체 구현들도 PEP 453의 이점을 인식하고 있으며, PyPy와 Jython 모두 자체 2.7 런타임에 ensurepip을 백포트할 계획을 갖고 있습니다.
자동 호출
PEP 453은 Makefile과 Windows 및 OSX 설치 프로그램에서 기본적으로 ensurepip이 자동으로 호출되도록 합니다. 이를 통해 기본적으로 모든 사용자가 pip이 이미 설치된 Python을 받도록 보장할 수 있었습니다. 그러나 이 PEP는 이것이 Python 2.7 Windows 및 Mac OS X 설치 프로그램에는 괜찮지만, 일반적으로 Python 2.7 Makefile에는 적절하지 않다고 봅니다.
Makefile의 주요 사용자는 Python을 직접 배포하는 다운스트림 패키지 관리자입니다. 이러한 다운스트림 배포자들은 일반적으로 ensurepip을 통해 pip이 설치되는 것을 원하지 않으며, 최종 사용자가 자신들의 패키지 관리자로 pip을 설치하기를 선호합니다. Makefile에서 ensurepip을 자동으로 호출하지 않으면, 이러한 배포자들은 ensurepip이 백포트되었다는 사실을 그냥 무시해도 그것을 통해 pip이 설치되는 일은 없게 됩니다.
OSX 및 Windows 설치 프로그램의 주요 사용자는 자신의 컴퓨터에 Python을 설치하려는 최종 사용자입니다. 이러한 사용자가 더 잘 지원되는 방식으로 자신의 Python에 pip을 설치할 수 있는 패키지 관리자는 존재하지 않습니다. 이러한 이유로 이 PEP는 OSX와 Windows에서 기본적으로 설치하는 것이 최선의 방안이라고 봅니다.
문서
이 PEP의 일환으로, Python 3.4용으로 갱신된 패키징 배포 및 설치 가이드를 Python 2.7에 백포트할 것입니다.
다운스트림 배포자에 의한 ensurepip 비활성화
venv 모듈에서 사용되므로, 다운스트림 배포자는 Python 3.4에서 ensurepip 모듈을 비활성화할 수 없습니다. 그러나 Python 2.7에는 그러한 모듈이 없으므로, 다운스트림 배포자가 ensurepip 모듈을 패치하여 아무것도 설치하지 못하게 하는 것이 명시적으로 허용됩니다.
다운스트림 배포자가 Python 2.7에서 ensurepip을 완전히 비활성화하려는 경우에도, 최소한 모듈 자체는 제공하고 python -m ensurepip 형식의 호출은 허용해야 합니다. 다만 오류를 발생시키거나 0이 아닌 종료 코드로 종료해야 하며, 사용자가 ensurepip 대신 사용할 수 있거나 사용해야 하는 것을 안내하는 오류를 stderr에 출력해야 합니다.
참고 문헌
Copyright
This document has been placed in the public domain.