PEP 3108 – 표준 라이브러리 재구성
- Author:
- Brett Cannon <brett at python.org>
- Status:
- Final
- Type:
- Standards Track
- Created:
- 01-Jan-2007
- Python-Version:
- 3.0
- Post-History:
- 28-Apr-2008
번역·라이선스 안내
이 비공식 한국어 번역은 원문 Copyright 절의 Public Domain 조건에 따라 제공합니다. 원저자와 공식 원문은 그대로 표시합니다. 수정되지 않은 기준 원문 · 공식 최신판
Note
Python 3.3 시점의 profile/cProfile 병합은 이루어지지 않았으므로, 폐기된 것으로 간주합니다(향후에 수행하는 것은 허용할 수 있습니다).
초록
언어 자체와 마찬가지로 Python의 표준 라이브러리(stdlib)는 수년에 걸쳐 매우 풍부해졌습니다. 그러나 시간이 지나면서 일부 모듈은 Python에 포함될 필요성이 사라졌습니다. 또한 Python이 처음 만들어진 이후 모듈에 대한 명명 규칙이 도입되었지만, 모든 모듈이 이를 따르는 것은 아닙니다.
Python 3.0은 장기적으로 유용하지 않은 모듈을 제거할 기회를 제공합니다. 이 기회를 통해 모듈 이름을 Python style guide를 따르도록 변경할 수도 있습니다. 이 PEP는 Python 3.0에 포함하지 않아야 하거나 이름을 변경해야 하는 모듈을 나열합니다.
제거할 모듈
Guido는 Py3K에서 “silly old stuff”를 표준 라이브러리에서 삭제해야 한다고 선언했습니다 [7]. 이는 의도적으로 범위를 열어 둔 것입니다. 제거할 각 모듈에는 더 이상 Python과 함께 배포해서는 안 되는 이유에 대한 정당화가 있어야 합니다. 이는 Python 2.x에서 해당 모듈이 사용 중단된 경우부터 더 이상 널리 사용되지 않는 플랫폼을 위한 모듈인 경우까지 다양할 수 있습니다.
이 PEP의 이 절에는 제거할 다양한 모듈이 나열되어 있습니다. 각 하위 절은 모듈을 제거하는 서로 다른 이유를 나타냅니다. 실제로 제거할 자격이 있는 모듈만 제거되도록 하려면, 각 모듈은 특정 하위 절에 나열되는 것 외에도 구체적인 정당화가 있어야 합니다.
어떤 이유에서 모듈이 “uniquely edited”된 이후 얼마나 오래되었는지를 언급할 때, 이는 전체 표준 라이브러리에 보편적으로 적용되는 변경이 아니라 해당 모듈만을 위해 체크인이 이루어진 이후 얼마나 오래되었는지를 의미합니다. 편집 시간이 “unique”로 표시되지 않았다면, 말 그대로 파일이 마지막으로 편집된 시간입니다.
이전에 사용 중단된 항목 [완료]
PEP 4에는 표준 라이브러리에서 사용 중단된 모든 모듈이 나열되어 있습니다. 명시된 동기는 PEP 4에 나열된 동기를 따릅니다. Python 3.0의 첫 번째 알파 릴리스 시점에 이 PEP에 나열된 모든 모듈은 제거됩니다.
lib-old의 전체 내용도 제거됩니다. 이 모듈들은 이미 가져오기가 불가능하도록 제거되었지만, 해당 코드를 사용하는 사용자를 위해 Python 배포판에 보관되어 있습니다.
- cfmfile
- 명시적인 이유 없이 Python 2.4부터 사용 중단된 것으로 문서화되어 있습니다.
- cl
- Python 2.0 또는 그 이전부터 더 이상 사용되지 않는 것으로 문서화되어 있습니다.
- SGI 하드웨어에 대한 인터페이스입니다.
- md5
hashlib모듈로 대체되었습니다.
- mimetools
- 이전 버전에서 폐기된 것으로 문서화되어 있습니다.
email패키지로 대체되었습니다.
- MimeWriter
email패키지로 대체되었습니다.
- mimify
email패키지로 대체되었습니다.
- multifile
email패키지로 대체되었습니다.
- posixfile
- 잠금은
fcntl.lockf()를 사용하여 수행하는 편이 좋습니다.
- 잠금은
- rfc822
email패키지로 대체되었습니다.
- sha
hashlib패키지로 대체되었습니다.
- sv
- Python 2.0 또는 그 이전부터 폐기된 것으로 문서화되어 있습니다.
- 폐기된 SGI Indigo 하드웨어에 대한 인터페이스입니다.
- timing
- Python 2.0 또는 그 이전부터 폐기된 것으로 문서화되어 있습니다.
time.clock()은 더 나은 시간 해상도를 제공합니다.
사용이 제한적인 플랫폼별 항목 [done]
Python은 다양한 플랫폼을 지원하며, 그중 일부는 널리 사용되거나 유지 관리되지 않습니다. 또한 이러한 플랫폼 중 일부에는 해당 플랫폼 사용자에게만 제한적으로 사용되는 모듈이 있습니다. 이러한 모듈의 유용성이 제한적이므로 Python 개발 팀이 해당 모듈을 유지 관리해야 하는 부담을 더 이상 지지 않도록 하는 편이 좋습니다.
아래에 언급된 모듈은 문서화되어 있습니다. 지정된 플랫폼의 문서화되지 않은 모든 모듈도 제거됩니다.
IRIX
IRIX 운영 체제는 더 이상 생산되지 않습니다 [12]. 이러한 사실을 고려하면 plat-irix[56] 디렉터리에서 모든 모듈을 제거하는 것이 합리적이라고 판단되었습니다.
- AL/al
- Indy 및 Indigo 워크스테이션에 사운드 지원을 제공합니다.
- 두 워크스테이션은 더 이상 사용할 수 없습니다.
- 코드는 3년 동안 독자적으로 수정되지 않았습니다.
- cd/CD
- SGI 시스템용 CD 드라이브 제어입니다.
- SGI는 더 이상 IRIX가 설치된 머신을 판매하지 않습니다.
- 코드는 14년 동안 독자적으로 수정되지 않았습니다.
- cddb
- 문서화되지 않았습니다.
- cdplayer
- 문서화되지 않았습니다.
- cl/CL/CL_old
- SGI 시스템용 압축 라이브러리입니다.
- SGI는 더 이상 IRIX가 설치된 머신을 판매하지 않습니다.
- 코드는 14년 동안 독자적으로 수정되지 않았습니다.
- DEVICE/GL/gl/cgen/cgensuport
- OpenGL의 전신인 GL 액세스입니다.
- 최소 8년 동안 수정되지 않았습니다.
- 타사 라이브러리는 더 나은 지원을 제공합니다(PyOpenGL [10]).
- ERRNO
- 문서화되지 않았습니다.
- FILE
- 문서화되지 않았습니다.
- FL/fl/flp
- FORMS 라이브러리 [13]를 위한 래퍼입니다.
- FORMS는 12년 동안 수정되지 않았습니다.
- 라이브러리는 널리 사용되지 않습니다.
- Google의 첫 8개 검색 결과는 fl에 관한 Python 문서입니다.
- fm
- IRIS Font Manager 라이브러리용 래퍼입니다.
- 더 이상 IRIX가 함께 제공되지 않는 SGI 머신에서만 사용할 수 있습니다.
- GET
- 문서화되지 않았습니다.
- GLWS
- 문서화되지 않았습니다.
- imgfile
- imglib 이미지 파일(
.rgb파일)용 SGI libimage 라이브러리 래퍼입니다. - Python Imaging Library는 읽기 전용 지원을 제공합니다 [11].
- 13년 동안 별도로 수정되지 않았습니다.
- imglib 이미지 파일(
- IN
- 문서화되지 않았습니다.
- IOCTL
- 문서화되지 않았습니다.
- jpeg
- JPEG 압축 및 압축 해제기용 래퍼입니다.
- 코드는 9년 동안 별도로 수정되지 않았습니다.
- 서드파티 라이브러리가 더 나은 지원을 제공합니다(Python Imaging Library [11]).
- panel
- 문서화되지 않았습니다.
- panelparser
- 문서화되지 않았습니다.
- readcd
- 문서화되지 않았습니다.
- SV
- 문서화되지 않았습니다.
- torgb
- 문서화되지 않았습니다.
- WAIT
- 문서화되지 않았습니다.
Mac 전용 모듈
Mac 전용 모듈은 제대로 유지 관리되지 않고 있습니다(예를 들어, 많은 모듈을 자동 생성하는 데 사용되는 bgen 도구는 UCS-4를 지원하도록 한 번도 업데이트된 적이 없습니다). 또한 이렇게 많은 OS 전용 모듈을 유지 관리하는 것은 Python의 역할도 아닙니다. 따라서 Lib/plat-mac 및 Mac 아래의 모든 모듈을 제거해야 합니다.
urllib에서 사용할 수 있도록 프록시 액세스용 스텁 모듈이 제공됩니다.
- _builtinSuites
- 문서화되어 있지 않습니다.
- lib-scriptpackages 아래의 패키지입니다.
- Audio_mac
- 문서화되어 있지 않습니다.
- aepack
- OSA 지원은 타사 모듈을 통해 더 잘 제공됩니다.
- Appscript [14].
- Intel Mac에서 문제를 일으키는 하드 코딩된 바이트 순서입니다.
- Carbon 패키지에 의존한다면 이름을 변경해야 할 수도 있습니다.
- OSA 지원은 타사 모듈을 통해 더 잘 제공됩니다.
- aetools
- aepack을 참조하십시오.
- aetypes
- aepack을 참조하십시오.
- applesingle
- 문서화되어 있지 않습니다.
- AppleSingle은 A/UX용 바이너리 파일 형식입니다.
- A/UX는 더 이상 배포되지 않습니다.
- appletrawmain
- 문서화되어 있지 않습니다.
- appletrunner
- 문서화되어 있지 않습니다.
- argvemulator
- 문서화되어 있지 않습니다.
- autoGIL
- Python을 CFRunLoop과 함께 사용하기에는 매우 좋지 않은 모델입니다.
- bgenlocations
- 문서화되어 있지 않습니다.
- buildtools
- 명시적인 이유 없이 Python 2.3부터 더 이상 사용되지 않는 것으로 문서화되어 있습니다.
- bundlebuilder
- 문서화되어 있지 않습니다.
- Carbon
- Carbon 개발이 중단되었습니다.
- 64비트 시스템을 완전히 지원하지 않습니다.
- UCS-4 유니코드 Python 빌드를 지원하도록 한 번도 업데이트되지 않은 bgen에 의존합니다.
- CodeWarrior
- 문서화되지 않았습니다.
- lib-scriptpackages 아래의 패키지입니다.
- ColorPicker
- GUI에는 Cocoa를 사용하는 편이 낫습니다.
- EasyDialogs
- GUI에는 Cocoa를 사용하는 편이 낫습니다.
- Explorer
- 문서화되지 않았습니다.
- lib-scriptpackages 아래의 패키지입니다.
- Finder
- 문서화되지 않았습니다.
- lib-scriptpackages 아래의 패키지입니다.
- findertools
- 더 이상 유용하지 않습니다.
- FrameWork
- 문서화가 빈약합니다.
- Carbon Events를 지원하도록 업데이트되지 않았습니다.
- gensuitemodule
- aepack을 참조하십시오.
- ic
- icglue
- icopen
- OS X에는 필요하지 않습니다.
- 일반적으로 좋지 않은 작업인 ‘open’을 대체하기 위한 것입니다.
- macerrors
- 문서화되지 않았습니다.
- MacOS
- 또한 binhex의 제거를 의미합니다.
- macostools
- macresource
- 문서화되지 않았습니다.
- MiniAEFrame
- aepack을 참조하십시오.
- Nav
- 문서화되지 않았습니다.
- Netscape
- 문서화되지 않았습니다.
- lib-scriptpackages 아래의 패키지입니다.
- OSATerminology
- pimp
- 문서화되지 않았습니다.
- PixMapWrapper
- 문서화되지 않았습니다.
- StdSuites
- 문서화되지 않았습니다.
- lib-scriptpackages 아래의 패키지입니다.
- SystemEvents
- 문서화되지 않았습니다.
- lib-scriptpackages 아래의 패키지입니다.
- Terminal
- 문서화되지 않았습니다.
- lib-scriptpackages 아래의 패키지입니다.
- terminalcommand
- 문서화되지 않았습니다.
- videoreader
- 더 이상 사용되지 않습니다.
- W
- Python과 함께 더 이상 배포되지 않습니다.
Solaris
- SUNAUDIODEV/sunaudiodev
- Sun 머신에서 사운드 카드에 액세스하는 기능입니다.
- 8년 넘게 독자적으로 수정되지 않은 코드입니다.
거의 사용되지 않음 [완료]
일부 플랫폼 독립적 모듈은 거의 사용되지 않습니다. 여기에는 재구현이 쉽다는 점, 사용자가 매우 적다는 점 또는 보다 현대적인 표준을 따르지 않는다는 점 등이 가능한 설명으로 포함됩니다.
- audiodev
- 문서화되지 않았습니다.
- 5년 동안 편집되지 않았습니다.
- imputil
- 문서화되지 않았습니다.
- 절대 임포트를 지원하도록 업데이트된 적이 없습니다.
- mutex
- 세마포어와 큐를 사용하여 쉽게 구현할 수 있습니다.
- 잠금 시도에서 블록할 수 없습니다.
- 추가된 이후 15년 동안 독자적으로 수정된 적이 없습니다.
- ‘sched’ 모듈과 함께 사용할 때만 유용합니다.
- 스레드로부터 안전하지 않습니다.
- stringold
- 문자열 객체 메서드의 함수 버전입니다.
- Python 1.6부터 더 이상 사용되지 않습니다.
- 문자열 객체 또는 모듈에 없는 모든 기능은 문자열 모듈로 이동됩니다(대부분 상수입니다).
- sunaudio
- 문서화되지 않았습니다.
- 7년 넘게 편집되지 않았습니다.
sunau모듈은 유사한 기능을 제공합니다.
- toaiff
- 문서화되지 않았습니다.
- 시스템에
sox라이브러리가 설치되어 있어야 합니다.
- user
- 애플리케이션이 자체 모듈 이름을 지정하고, 존재 여부를 확인한 후 발견되면 가져오도록 허용하면 쉽게 처리됩니다.
- new
- ‘types’ 모듈의 이름을 다시 바인딩할 뿐입니다.
type내장 함수를 호출하면 대부분의 타입도 쉽게 얻을 수 있습니다.- 독스트링에는 27241차 개정판(2002-06-15)부터 이 모듈이 더 이상 유용하지 않다고 명시되어 있습니다.
- 순수
- Pure Atria가 Rational에 인수되고, Rational이 다시 IBM에 인수되기 전에 작성되었습니다(즉, 매우 오래되었습니다).
- test.testall
- regrtest 이전 시절의 것입니다.
사용 중단
사용 중단된다는 것은 표준 라이브러리의 다른 모듈이나 널리 배포된 서드 파티 라이브러리가 이 모듈의 용도에 더 나은 해결책을 제공한다는 의미입니다.
- Bastion/rexec [완료]
- 제한된 실행 / 보안입니다.
- Python 2.3에서 비활성화되었습니다.
- 안전하지 않은 것으로 간주된 모듈입니다.
- bsddb185 [완료]
- bsddb3로 대체되었습니다.
- 기본적으로 빌드되지 않습니다.
- 문서에는 “새 코드에서 모듈을 직접 사용해서는 안 됩니다”라고 명시되어 있습니다.
- PyPI에서 외부적으로 이용할 수 있습니다.
- Canvas [완료]
- 2000년부터 Guido가 주석에서 사용 중단으로 표시했습니다(http://bugs.python.org/issue210677 참조).
Tkinter.Canvas클래스를 사용하는 것이 더 좋습니다.
- commands [완료]
- subprocess 모듈이 이를 대체합니다(PEP 324).
- getstatus()를 제거하고 나머지는 subprocess로 옮기십시오.
- compiler [완료]
- dircache [완료]
- 사용 빈도가 미미합니다.
- 쉽게 재현할 수 있습니다.
- dl [완료]
- ctypes가 동일한 기능을 더 잘 지원합니다.
- fpformat [완료]
- 모든 기능은 문자열 보간으로 지원합니다.
- htmllib [완료]
- HTMLParser로 대체되었습니다.
- ihooks [완료]
- 문서화되지 않았습니다.
- Python 2.3 이후 비활성화된 rexec와 함께 사용하기 위한 것입니다.
- imageop [완료]
- 타사 라이브러리(Python Imaging Library [11])에서 더 잘 지원합니다.
- 단위 테스트는 rgbimg 및 imgfile에 의존했습니다.
- rgbimg는 Python 2.6에서 제거되었습니다.
- imgfile은 이 PEP에서 제거될 예정입니다.
- linuxaudiodev [완료]
- ossaudiodev로 대체되었습니다.
- mhlib [완료]
- 개별 모듈로 제거하고 대신
mailbox를 사용해야 합니다.
- 개별 모듈로 제거하고 대신
- popen2 [완료]
- subprocess 모듈이 이를 대체합니다 (PEP 324).
- sgmllib [완료]
- SGML을 완전히 구문 분석하지 못합니다.
- 제거될 예정인 htmllib를 지원하기 위해 표준 라이브러리에 포함되어 있습니다.
- sre [완료]
- 이전에 사용 중단이 예고되었으므로
re를 가져와야 합니다.
- 이전에 사용 중단이 예고되었으므로
- stat [TODO
os.stat()로 모든 사용처를 옮겨야 합니다]- 이제
os.stat()은 속성이 포함된 튜플을 반환합니다. - 모듈의 함수는 os.stat이 반환하는 객체의 메서드로 만들어야 합니다.
- 이제
- statvfs [완료]
- 이제
os.statvfs는 속성이 포함된 튜플을 반환합니다.
- 이제
- thread [완료]
- 대신 ‘threading’을 사용해야 합니다.
- ‘thread’의 이름을 _thread로 변경하십시오.
- dummy_thread를 사용 중단으로 표시하고 _dummy_thread로 이름을 변경하십시오.
- thread.get_ident를 threading으로 옮기십시오.
- Guido는 이전에 해당 지원 중단을 지지했습니다 [8].
- 대신 ‘threading’을 사용해야 합니다.
- urllib [완료]
- urllib2로 대체되었습니다.
- urllib에만 고유한 기능은 urllib 패키지에 유지합니다.
- UserDict [완료: 3.0] [TODO 2.6 처리]
- 타입이 슈퍼클래스가 될 수 있으므로 그다지 유용하지 않습니다.
- 유용한 부분은 ‘collections’ 모듈로 이동했습니다.
- UserList/UserString [완료]
- 타입이 슈퍼클래스가 될 수 있으므로 유용하지 않습니다.
- ‘collections’ 모듈로 이동했습니다.
유지 관리 부담
수년에 걸쳐 특정 모듈은 python-dev가 유지 관리하기에 큰 부담이 되었습니다. 이러한 상황에서는 해당 모듈을 커뮤니티에 맡겨 유지 관리하도록 하는 것이 더 바람직합니다. 그러면 python-dev는 언어 지원과 표준 라이브러리의 다른 모듈 중 과도한 시간과 노력을 요구하지 않는 모듈에 집중할 수 있습니다.
- bsddb3
- http://www.jcea.es/programacion/pybsddb.htm 에서 외부적으로 유지 관리됩니다.
- 지속적으로 테스트가 불안정합니다.
- Berkeley DB는 Python과 다른 릴리스 일정을 따르므로 바인딩이 사용 가능한 항목과 반드시 동기화되지는 않습니다.
이름을 변경할 모듈
표준 라이브러리에는 PEP 8이 생기기 전에 이미 많은 모듈이 존재했습니다. 이로 인해 일부 이름 지정의 불일치와 해결해야 할 네임스페이스 비대화가 발생했습니다.
PEP 8 위반 [완료]
PEP 8은 모듈 이름이 “짧고 모두 소문자여야 한다”고 명시하며, “가독성이 향상되는 경우 밑줄을 사용할 수 있습니다…” 패키지 이름에서는 밑줄 사용을 권장하지 않습니다. 다음 모듈은 PEP 8을 위반하며 패키지로 이동하여 어떤 식으로든 이름이 변경되는 것도 아닙니다.
| 현재 이름 | 대체 이름 |
|---|---|
| _winreg | winreg |
| ConfigParser | configparser |
| copy_reg | copyreg |
| Queue | queue |
| SocketServer | socketserver |
동일한 인터페이스의 C 구현과 Python 구현 병합
여러 인터페이스에는 Python 구현과 C 구현이 모두 있습니다. 속도를 위해 C 구현을 제공하고 Python 구현을 대체 수단으로 두는 것은 훌륭하지만, 표준 라이브러리에서 두 구현을 독립적으로 노출할 필요는 없습니다. Python 3.0에서는 구현이 두 가지인 모든 인터페이스를 하나의 공개 인터페이스로 병합합니다.
C 모듈이 참조 구현이 아니라는 사실을 나타내기 위해 앞에 밑줄을 붙입니다(참조 구현은 Python 구현입니다). 이는 C 버전과 Python 버전 간의 의미론적 차이를 Python 3.0 이전에 모두 해결해야 하며, 그렇지 않으면 수정할 수 있을 때까지 C 구현을 제거한다는 의미입니다.
아래에 나열되지 않은 인터페이스 중 하나는 xml.etree.ElementTree입니다. 이는 외부에서 유지 관리되는 모듈이므로 이름 변경을 Python 개발 팀이 직접 제어하지 않습니다. 이에 대한 논의는 Open Issues에서 확인하십시오.
- pickle/cPickle [완료]
- cPickle을 _pickle로 이름을 변경합니다.
- C 구현의 의미적 완전성은 검증되지 않았습니다.
- profile/cProfile [TODO]
- cProfile을 _profile로 이름을 변경합니다.
- C 구현의 의미적 완전성은 검증되지 않았습니다.
- StringIO/cStringIO [완료]
- 해당 클래스를 ‘io’ 모듈에 추가합니다.
공개되고 문서화된 인터페이스 없음 [완료]
표준 라이브러리에는 정의된 공개 인터페이스가 없는 모듈이 여러 개 있습니다. 이러한 모듈은 노출되는 다른 모듈을 지원하는 코드로 존재합니다. 이러한 모듈은 직접 사용하도록 만들어진 것이 아니므로 이 사실이 드러나도록 이름을 변경해야 합니다.
| 현재 이름 | 대체 이름 |
|---|---|
| markupbase | _markupbase |
잘못 선택된 이름 [완료]
몇몇 모듈에는 돌이켜 보면 잘못 선택된 이름이 있습니다. 잘못된 이름이 2.x 시리즈 이후에도 계속 사용되지 않도록 이름을 변경해야 합니다.
| 현재 이름 | 대체 이름 |
|---|---|
| repr | reprlib |
| test.test_support | test.support |
모듈 그룹화 [완료]
표준 라이브러리가 성장하면서 그 안의 여러 영역이 여러 모듈을 포함하도록 확장되었습니다(예: 데이터베이스 파일 지원). 따라서 관련 모듈을 패키지로 그룹화하는 것이 합리적입니다.
dbm 패키지
| 현재 이름 | 대체 이름 |
|---|---|
| anydbm | dbm.__init__ [1] |
| dbhash | dbm.bsd |
| dbm | dbm.ndbm |
| dumbdm | dbm.dumb |
| gdbm | dbm.gnu |
| whichdb | dbm.__init__ [1] |
html 패키지
| 현재 이름 | 대체 이름 |
|---|---|
| HTMLParser | html.parser |
| htmlentitydefs | html.entities |
http 패키지
| 현재 이름 | 대체 이름 |
|---|---|
| httplib | http.client |
| BaseHTTPServer | http.server [2] |
| CGIHTTPServer | http.server [2] |
| SimpleHTTPServer | http.server [2] |
| Cookie | http.cookies |
| cookielib | http.cookiejar |
http.server 모듈은 지정된 모듈을 결합할 수 있습니다
이름 충돌이 없으므로 안전하게 결합할 수 있습니다.tkinter 패키지
| 현재 이름 | 대체 이름 |
|---|---|
| Dialog | tkinter.dialog |
| FileDialog | tkinter.filedialog [4] |
| FixTk | tkinter._fix |
| ScrolledText | tkinter.scrolledtext |
| SimpleDialog | tkinter.simpledialog [5] |
| Tix | tkinter.tix |
| Tkconstants | tkinter.constants |
| Tkdnd | tkinter.dnd |
| Tkinter | tkinter.__init__ |
| tkColorChooser | tkinter.colorchooser |
| tkCommonDialog | tkinter.commondialog |
| tkFileDialog | tkinter.filedialog [4] |
| tkFont | tkinter.font |
| tkMessageBox | tkinter.messagebox |
| tkSimpleDialog | tkinter.simpledialog [5] |
| turtle | tkinter.turtle |
tkinter.filedialog는 FileDialog와
tkFileDialog를 이름 충돌 없이 안전하게 결합할 수 있습니다.tkinter.simpledialog는 SimpleDialog를 안전하게 결합할 수 있고
tkSimpleDialog와 이름 충돌이 없습니다.urllib 패키지
원래 이 새 패키지의 이름은 url로 지정할 예정이었지만, 이 이름이 변수로 흔히 사용되기 때문에 이름을 urllib로 유지하고 기존 모듈을 대신 새 패키지로 옮기는 편이 더 낫다고 판단되었습니다.
| 현재 이름 | 대체 이름 |
|---|---|
| urllib2 | urllib.request, urllib.error |
| urlparse | urllib.parse |
| urllib | urllib.parse, urllib.request, urllib.error [6] |
| robotparser | urllib.robotparser |
urllib의 인용 관련 함수가 추가됩니다
urllib.parse에 추가됩니다. urllib.URLOpener 및 urllib.FancyUrlOpener은 두 모듈의 문서가 업데이트되는 한 urllib.request에 추가됩니다.xmlrpc 패키지
| 현재 이름 | 대체 이름 |
|---|---|
| xmlrpclib | xmlrpc.client |
| DocXMLRPCServer | xmlrpc.server [3] |
| SimpleXMLRPCServer | xmlrpc.server [3] |
xmlrpc.server로 결합되는 모듈에는 명명 충돌이
없으므로 안전하게 병합할 수 있습니다.전환 계획
문제
이 PEP와 관련된 문제입니다:
- Issue 2775: 마스터 추적 문제
- Issue 2828: undoc.rst 정리
제거할 모듈의 경우
모듈을 제거할 때는 먼저 Python 3.0에서 모듈을 제거하여 종속성이 존재하는 위치를 확인하는 것이 가장 쉽습니다. 이렇게 하면 DeprecationWarning 억제를 필요로 할 가능성이 있는 코드를 더 쉽게 찾을 수 있습니다.
Python 3.0에서
- 모듈을 제거합니다.
- 관련 테스트를 제거합니다.
- 모든 문서를 제거합니다(일반적으로 모듈의 문서 파일과 Library Reference 파일의 해당 항목을 제거합니다).
- 필요한 경우
Modules/Setup.dist와setup.py를 편집하십시오. - 회귀 테스트 모음을
-uall을 사용하여 실행하십시오. 제거된 모듈의 가져오기가 실패하여 건너뛰는 테스트에 주의하십시오. - 적절한
Misc/NEWS항목과 함께 변경 사항을 커밋하십시오. - 3.0 단계가 완료되었음을 명시하여 이 PEP를 업데이트하십시오.
Python 2.6에서
- 해당 모듈이 Python으로 구현된 경우, 실행되는 첫 번째 코드로 다음 코드를 사용 중단된 모듈에 추가하십시오. 필요에 따라 모듈 이름과
warnings가져오기를 조정하십시오.:from warnings import warnpy3k warnpy3k("the XXX module has been removed in Python 3.0", stacklevel=2) del warnpy3k
확장 모듈인 경우에는 다음 코드를 사용하십시오.:
if (PyErr_WarnPy3k("the XXX module has been removed in " "Python 3.0", 2) < 0) return;
Misc/TextMate에서 제공되는 Python-Dev TextMate 번들에는 이 모든 내용을 생성하는 명령이 포함되어 있습니다. - 문서를 업데이트하십시오. 자체 문서 파일이 있는 모듈의 경우,
module디렉티브와 함께:deprecated:옵션 및deprecated디렉티브를 사용하고, 사용 중단은 2.6에서 발생하지만 모듈 제거는 3.0에 이루어진다고 명시하십시오.:.. deprecated:: 2.6 The :mod:`XXX` module has been removed in Python 3.0.
파일에 단순히 나열된 모듈(예:
undoc.rst)에는warning디렉티브를 사용하십시오. test_py3kwarn의 모듈 삭제 테스트에 해당 모듈을 추가하십시오.- 모듈의 테스트 코드에서 다음을 사용하여 경고를 억제하십시오.
test.test_support.import_module(name, deprecated=True)
- 적절한
Misc/NEWS항목과 함께 변경 사항을 커밋하십시오 (차단하십시오py3k에서 이 체크인을!). - 2.6 단계가 완료되었음을 명시하여 이 PEP를 업데이트하십시오.
모듈 이름 변경
이름 변경을 지원하는 2to3 리팩터링 도구의 기능을 사용하여 사람들이 새 모듈 이름으로 전환하도록 지원합니다 [9]. 가져오기 문을 다시 작성하여 가져오기 문만 수정하고 나머지 코드는 수정하지 않아도 되도록 합니다. 이는 가져오기 문에서 as 키워드를 사용하여 새 이름을 기준으로 가져오면서 모듈 네임스페이스에 이전 이름을 바인딩하는 방식으로 수행합니다. 키워드가 이미 사용 중인 경우에는 재할당된 이름을 그대로 두고 가져오는 모듈만 변경해야 합니다. fix_imports 픽서는 이를 구현하는 방법의 예입니다.
Python 3.0
- 이름 변경을 지원하도록 샌드박스의 2to3를 업데이트하십시오.
svn move를 사용하여 모듈 이름을 변경하십시오.- 표준 라이브러리의 모든 가져오기 문을 새 이름을 사용하도록 업데이트하십시오. 가장 쉬운 방법으로 2to3의
fix_imports픽서를 사용하십시오. - 모듈 자체의 문서에서 모듈 이름을 변경하십시오.
- 문서의 모든 참조를 이전 이름에서 새 이름으로 업데이트하십시오.
- 이름 변경이 정상적으로 이루어졌는지 확인하기 위해
regrtest.py -uall을 실행하십시오. Misc/NEWS에 항목을 추가하십시오.- 변경 사항을 커밋하십시오.
Python 2.6
- 모듈의 문서에 Python 3.0에서 모듈 이름이 변경된다는 내용을 언급하는 주석을 추가하십시오.:
.. note:: The :mod:`OLDNAME` module has been renamed to :mod:`NEWNAME` in Python 3.0.
- 문서 변경 사항을 커밋하십시오.
- py3k에서 해당 리비전을 차단하십시오.
미해결 문제
표준 라이브러리 외부에서 유지 관리되는 모듈의 이름 변경
xml.etree.ElementTree은 PEP 8 명명 표준을 충족하지 않을 뿐만 아니라 노출된 C 구현도 포함합니다. 이는 외부에서 유지 관리되는 패키지이지만, PEP 360에 해당합니다. 유지 관리자에게 이름을 PEP 8에 맞게 변경하고 C 구현을 숨겨 달라는 요청을 할 예정입니다.
거부된 아이디어
원래 제거 대상으로 제안되었던 모듈
- asynchat/asyncore
- Josiah Carlson은 해당 모듈을 유지 관리하겠다고 밝혔습니다.
- audioop/sunau/aifc
- 해당 형식이 여전히 사용되는 오디오 모듈입니다.
- base64/quopri/uu
- 모두 여전히 널리 사용됩니다.
- ‘codecs’ 모듈은 기본적인 사용에 그다지 좋은 API를 제공하지 않습니다.
- fileinput
- stdin으로 작업해야 할 때 유용합니다.
- linecache
- 여러 곳에서 내부적으로 사용됩니다.
- nis
- NIS의 신규 설치가 여전히 이루어지고 있다는 사람들의 증언
- getopt
- optparse보다 단순합니다.
- repr
- 재정의를 위한 기반으로 유용합니다.
- 내부적으로 사용됩니다.
- sched
- 시뮬레이션에 유용합니다.
- symtable/_symtable
- 문서가 작성되었습니다.
- telnetlib
- 빠르고 임시적인 원격 액세스에 매우 편리합니다.
- 일부 하드웨어는 구성을 수행하고 조회하기 위해 telnet을 사용하는 것을 지원합니다.
- Tkinter
- IDLE이 존재하지 못하게 할 것입니다.
- 기본으로 제공되는 GUI 툴킷이 없게 됩니다.
새로운 최상위 패키지 도입
표준 라이브러리 전체를 자체 패키지 안에 배치하자는 제안이 있었습니다. 이 PEP에서는 자체적인 설계 문제(이름 지정, 가져오기 의미론에서 특별히 고려할 가치가 있는지 여부 등)가 있으므로 이 문제를 다루지 않습니다. 새로운 최상위 패키지가 도입되면 이 PEP의 모든 내용은 쉽게 처리할 수 있습니다.
테마 관련 모듈을 포함할 새로운 패키지 도입
이 PEP를 작성하는 동안 표준 라이브러리에 특정 테마가 나타난다는 사실이 확인되었습니다. 과거에 사람들은 비슷한 테마를 공유하는 모듈(예: 오디오)을 한데 모으는 데 도움이 되도록 새로운 패키지를 도입하자고 제안했습니다. 도입할 새로운 패키지를 제안하기 위해 공개 이슈가 생성되었습니다.
하지만 결국 이 아이디어를 추진할 만큼 충분한 지지를 모으지 못했습니다. 대신 이름 단순화를 만들 PEP의 지침으로 선택했습니다.
참고 자료
Copyright
This document has been placed in the public domain.