PEP 297 – 시스템 업그레이드 지원
- Author:
- Marc-André Lemburg <mal at lemburg.com>
- Status:
- Rejected
- Type:
- Standards Track
- Created:
- 19-Jul-2001
- Python-Version:
- 2.6
- Post-History:
번역·라이선스 안내
이 비공식 한국어 번역은 원문 Copyright 절의 Public Domain 조건에 따라 제공합니다. 원저자와 공식 원문은 그대로 표시합니다. 수정되지 않은 기준 원문 · 공식 최신판
거부 공지
이 PEP는 충분한 관심을 얻지 못하여 거부되었습니다.
초록
이 PEP는 전체 배포판을 다시 설치하거나 새 패치 레벨 릴리스를 기다리지 않고도 Python 표준 라이브러리를 부분적으로 업그레이드할 수 있게 하는 전략을 제안합니다.
문제
현재 Python은 기본적으로 표준 라이브러리의 모듈이나 패키지를 재정의하는 것을 허용하지 않습니다. PYTHONPATH 환경 변수를 정의하면 이것이 가능하기는 하지만(이 변수에 정의된 경로는 Python 표준 라이브러리 경로 앞에 추가됩니다), 설정을 변경하지 않고 이를 달성하는 표준적인 방법은 없습니다.
Python 표준 라이브러리가 distutils, email, PyXML 패키지처럼 별도로도 제공되어 Python 배포판과 독립적으로 설치할 수 있는 패키지를 포함하기 시작했으므로, 변경 사항을 반영하기 위해 Python 인터프리터의 새 패치 레벨 릴리스를 기다리지 않고도 이러한 패키지를 업그레이드할 수 있는 선택지가 있는 것이 바람직합니다.
경우에 따라서는 보안 문제에 대한 핫픽스를 제공하는 경우처럼, 전체 Python 릴리스 주기를 거치지 않고 표준 라이브러리의 모듈을 업데이트하는 것이 바람직할 수도 있습니다.
제안하는 해결책
이 PEP는 서로 다르지만 반드시 상충하지는 않는 두 가지 해결책을 제안합니다:
sys.path에 새로운 표준 검색 경로를 추가합니다:$stdlibpath항목 바로 앞에$stdlibpath/system-packages를 둡니다. 이는 인터프리터 시작 시sys.path에 덧붙여지는, 사이트 애드온을 위한 기존 항목$stdlibpath/site-packages를 보완합니다.이 새로운 표준 위치를 활용하려면, distutils가 특정 패키지를 서드파티 패키지의 표준 위치인
$stdlibpath/site-packages가 아니라$stdlibpath/system-packages에 설치하는 기능을 지원하도록 확장되어야 합니다.- 시스템 업그레이드의 경우 distutils가
$stdlibpath/site-packages가 아니라$stdlibpath에 직접 설치하도록 조정합니다.
첫 번째 해결책은 두 번째 해결책에 비해 몇 가지 장점이 있습니다:
- 업그레이드를 쉽게 식별할 수 있습니다(
$stdlibpath/system-packages만 살펴보면 됩니다) - 인터프리터 설치의 나머지 부분에 영향을 주지 않고 업그레이드를 제거할 수 있습니다
- 모듈을 패키지에서 사실상 제거할 수 있습니다. 이는 Python이 패키지를 임포트하는 방식 때문입니다. Python은 최상위 패키지 디렉터리를 찾고 나면 이후의 모든 패키지 하위 모듈 임포트에 대해 그 디렉터리에 머무릅니다.
- 이 방식은 기존 설치 위에 덮어 설치하는 편법적인 방식보다 전반적으로 훨씬 깔끔한 설계입니다
두 번째 접근 방식의 유일한 장점은 Python 인터프리터를 변경할 필요가 없다는 점과 이전 Python 버전에서도 동작한다는 점입니다.
두 해결책 모두 distutils의 변경이 필요합니다. 이러한 변경은 패키지 작성자가 구현할 수도 있지만, 제안된 동작을 켜는 표준 방법을 정의하는 편이 더 나을 것입니다.
범위
해결책 1: Python 2.6 이상
해결책 2: distutils가 지원하는 모든 Python 버전
감사의 말
없음
참고 문헌
없음
Copyright
This document has been placed in the public domain.