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에 자동 호출을 추가하는 것은 제안하지 않습니다.
또한 패키지 배포 및 설치 안내서의 문서 변경 사항을, 설치 프로그램을 부트스트랩하기 위해 ensurepip 모듈을 사용하는 것을 참조하는 3.4의 내용과 일치하도록 갱신할 것을 제안합니다.
근거
Python 2.7은 사실상 2.x 계열의 끝을 나타내는 Python의 LTS 릴리스이며, 여전히 Python 2.7을 주 버전으로 사용하고 있는 매우 큰 규모의 사용자 집단이 존재합니다. 이러한 사용자들은 더 넓은 Python 생태계에 참여하기 위해, 패키징 도구를 부트스트랩하는 올바른 방법을 직접 찾아 나서야 합니다.
최종 사용자가 더 넓은 Python 생태계에 참여하는 것을 최대한 쉽게 만드는 것이 중요하다는 것이 이 PEP의 의견이며, 여기에는 다음 세 가지 주된 이유가 있습니다:
- 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가 설치되는 것을 원하지 않으며, 최종 사용자가 자신들 고유의 패키지 관리자로 이를 설치하기를 선호합니다. Makefile에서 ensurepip를 자동으로 호출하지 않는다면, 이러한 배포자들은 ensurepip가 백포트되었다는 사실을 그저 무시하고도 여전히 이를 통해 pip가 설치되지 않도록 할 수 있습니다.
OSX 및 Windows 설치 프로그램의 주된 소비자는 자신의 컴퓨터에 Python을 설치하려는 최종 사용자들입니다. 이러한 사용자들이 더 잘 지원되는 방법을 통해 자신의 Python에 pip를 설치할 수 있는 패키지 관리자는 존재하지 않습니다. 이러한 이유로, OSX 및 Windows에서 기본적으로 설치하는 것이 최선의 방침이라는 것이 이 PEP의 견해입니다.
문서
이 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.