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에서도 동작한다는 점입니다.
두 해법 모두 distutils에 대한 변경이 필요합니다. 이러한 변경은 패키지 작성자가 직접 구현할 수도 있지만, 제안된 동작을 켜는 표준적인 방법을 정의하는 편이 더 나을 것입니다.
범위
해법 1: Python 2.6 이상
해법 2: distutils가 지원하는 모든 Python 버전
크레딧
없음
참고 문헌
없음
Copyright
This document has been placed in the public domain.