Following system colour scheme Selected dark colour scheme Selected light colour scheme

Python 개선 제안 한국어 번역

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

Table of Contents

번역·라이선스 안내

이 비공식 한국어 번역은 원문 Copyright 절의 Public Domain 조건에 따라 제공합니다. 원저자와 공식 원문은 그대로 표시합니다. 수정되지 않은 기준 원문 · 공식 최신판

Note

Python 3.3 시점의 profile/cProfile 병합은 이루어지지 않았으므로 폐기된 것으로 간주합니다(다만 향후에 진행하는 것은 허용됩니다).

초록

언어 자체와 마찬가지로 Python의 표준 라이브러리(stdlib)도 수년에 걸쳐 매우 풍부해졌습니다. 그러나 시간이 흐르면서 일부 모듈은 Python에 포함될 필요성을 잃었습니다. 또한 Python이 처음 만들어진 이후 모듈 명명 규칙이 도입되었지만, 모든 모듈이 이를 따르지는 않습니다.

Python 3.0은 장기적으로 유용하지 않은 모듈을 제거할 기회를 제공합니다. 이 기회를 통해 모듈이 Python 스타일 가이드를 따르도록 모듈 이름을 변경할 수도 있습니다. 이 PEP는 Python 3.0에 포함되지 않아야 하거나 이름을 변경해야 하는 모듈을 나열합니다.

제거할 모듈

Guido는 Py3K에서 “낡고 쓸데없는 것들(silly old stuff)”을 표준 라이브러리에서 삭제하겠다고 선언했습니다 [7]. 이는 의도적으로 범위를 열어 둔 것입니다. 제거할 각 모듈에는 더 이상 Python과 함께 배포하지 않아야 하는 이유에 대한 근거가 있어야 합니다. 그 근거는 모듈이 Python 2.x에서 폐지 예정(deprecated)으로 지정된 경우부터 더 이상 널리 사용되지 않는 플랫폼을 위한 모듈인 경우까지 다양할 수 있습니다.

PEP의 이 절에서는 제거할 여러 모듈을 나열합니다. 각 하위 절은 모듈을 제거하는 서로 다른 이유를 나타냅니다. 정말로 제거되어야 마땅한 모듈만 실제로 제거되도록, 각 모듈은 특정 하위 절에 나열되는 것과 더불어 구체적인 근거를 갖추어야 합니다.

어떤 사유에서 모듈이 “고유하게 편집된(uniquely edited)” 지 얼마나 지났는지를 언급할 때, 이는 표준 라이브러리 전체에 일괄 적용된 변경이 아니라 해당 모듈만을 위한 체크인이 마지막으로 이루어진 뒤 얼마나 지났는지를 가리킵니다. 수정 시점이 “고유”하다고 표시되지 않았다면, 그것은 말 그대로 해당 파일이 마지막으로 수정된 시점입니다.

이전에 폐지 예정으로 지정됨 [완료]

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()이 더 나은 시간 해상도를 제공합니다.

사용이 극히 적은 플랫폼 특화 모듈 [완료]

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(Python 이미징 라이브러리)는 읽기 전용 지원을 제공합니다 [11].
    • 13년 동안 이 모듈만을 대상으로 한 수정이 없었습니다.
  • 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는 서드파티 모듈로 지원하는 편이 더 낫습니다.
    • 엔디언이 하드코딩되어 있어 Intel Mac에서 동작하지 않습니다.
    • Carbon 패키지에 의존한다면 이름을 바꿔야 할 수도 있습니다.
  • aetools
    • aepack을 참조하십시오.
  • aetypes
    • aepack을 참조하십시오.
  • applesingle
    • 문서화되어 있지 않습니다.
    • AppleSingle은 A/UX용 바이너리 파일 형식입니다.
    • A/UX는 더 이상 배포되지 않습니다.
  • appletrawmain
    • 문서화되어 있지 않습니다.
  • appletrunner
    • 문서화되어 있지 않습니다.
  • argvemulator
    • 문서화되어 있지 않습니다.
  • autoGIL
    • CFRunLoop과 함께 Python을 사용하는 방식으로는 매우 나쁜 모델입니다.
  • bgenlocations
    • 문서화되어 있지 않습니다.
  • buildtools
    • Python 2.3부터 명시적인 이유 없이 폐지 예정으로 문서화되어 있습니다.
  • bundlebuilder
    • 문서화되어 있지 않습니다.
  • Carbon
    • Carbon 개발은 중단되었습니다.
    • 64비트 시스템을 완전하게 지원하지 않습니다.
    • Python의 UCS-4 유니코드 빌드를 지원하도록 한 번도 갱신되지 않은 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부터 쓸모없게 되었습니다.
    • 문자열 객체나 모듈에 없는 기능은 모두 string 모듈로 옮겨집니다(대부분 상수입니다).
  • sunaudio
    • 문서화되어 있지 않습니다.
    • 7년 넘게 수정되지 않았습니다.
    • sunau 모듈이 비슷한 기능을 제공합니다.
  • toaiff
    • 문서화되어 있지 않습니다.
    • 시스템에 sox 라이브러리가 설치되어 있어야 합니다.
  • user
    • 애플리케이션이 자체 모듈 이름을 지정하게 하고, 그 모듈이 있는지 확인한 뒤 있으면 임포트하도록 하면 쉽게 처리할 수 있습니다.
  • new
    • ‘types’ 모듈에 있는 이름을 다시 바인딩한 것에 불과합니다.
    • 대부분의 타입은 type 내장 함수를 호출해서 쉽게 얻을 수도 있습니다.
    • 독스트링에 따르면 이 모듈은 리비전 27241(2002-06-15)부터 더 이상 쓸모가 없습니다.
  • pure
    • 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(컴파일러) [완료]
    • 내장 컴파일러와 표준 라이브러리 패키지를 둘 다 유지 관리하는 것은 중복입니다 [16].
    • 컴파일러가 생성한 AST를 사용할 수 있습니다 [15].
    • AST로부터 컴파일하는 메커니즘을 추가해야 합니다.
  • 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].
  • 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

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

urllib 패키지

원래 이 새 패키지의 이름은 url로 정할 예정이었습니다. 그러나 이 이름이 변수 이름으로 흔히 쓰이기 때문에 urllib라는 이름을 유지하고, 대신 기존 모듈들을 새 패키지로 옮기는 편이 낫다고 판단했습니다.

현재 이름 대체 이름
urllib2 urllib.request, urllib.error
urlparse urllib.parse
urllib urllib.parse, urllib.request, urllib.error [6]
robotparser urllib.robotparser

xmlrpc 패키지

현재 이름 대체 이름
xmlrpclib xmlrpc.client
DocXMLRPCServer xmlrpc.server [3]
SimpleXMLRPCServer xmlrpc.server [3]

전환 계획

문제점

이 PEP와 관련된 이슈는 다음과 같습니다:

제거할 모듈의 경우

모듈을 제거할 때는 의존성이 어디에 있는지 확인할 수 있도록 Python 3.0에서 먼저 모듈을 제거하는 것이 가장 쉽습니다. 이렇게 하면 DeprecationWarning을 억제해야 할 (가능성이 있는) 코드를 더 쉽게 찾을 수 있습니다.

Python 3.0에서

  1. 모듈을 제거하십시오.
  2. 관련 테스트를 제거하십시오.
  3. 모든 문서를 제거하십시오(보통 해당 모듈의 문서 파일과 라이브러리 레퍼런스 파일에 있는 해당 항목).
  4. 필요하면 Modules/Setup.dist와 setup.py를 편집하십시오.
  5. (-uall을 사용하여) 회귀 테스트 스위트를 실행하십시오. 제거된 모듈의 임포트가 실패하여 건너뛰는 테스트에 주의하십시오.
  6. (적절한 Misc/NEWS 항목과 함께) 변경 사항을 체크인하십시오.
  7. 3.0 단계가 완료되었음을 이 PEP에 기록하여 갱신하십시오.

Python 2.6에서

  1. 폐지 예정 모듈이 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 번들에는 이 모든 내용을 자동으로 생성해 주는 명령이 들어 있습니다).

  2. 문서를 갱신하십시오. 자체 문서 파일이 있는 모듈의 경우, module 지시자에 :deprecated: 옵션을 사용하고 deprecated 지시자도 함께 사용하여, 폐지는 2.6에서 이루어지지만 3.0에서의 모듈 제거를 위한 것임을 명시하십시오.:
    .. deprecated:: 2.6
       The :mod:`XXX` module has been removed in Python 3.0.
    

    파일에 이름만 나열된 모듈(예: undoc.rst)은 warning 디렉티브를 사용하십시오.

  3. test_py3kwarn의 모듈 삭제 테스트에 해당 모듈을 추가하십시오.
  4. 모듈의 테스트 코드에서 다음을 사용하여 경고를 억제하십시오.
    test.test_support.import_module(name, deprecated=True).
  5. 알맞은 Misc/NEWS 항목과 함께 변경 사항을 체크인하십시오(py3k에서는 이 체크인을 차단하십시오!).
  6. 2.6 단계가 완료되었다는 내용을 이 PEP에 기록하십시오.

모듈 이름 변경

사람들이 새 모듈 이름으로 옮겨 가도록 돕기 위해 2to3 리팩터링 도구의 이름 변경 지원 기능을 사용합니다 [9]. import 문을 다시 작성하므로 import 문만 고치면 되고 나머지 코드는 전혀 건드리지 않아도 됩니다. 이를 위해 import 문에서 as 키워드를 사용합니다. 새 이름으로 임포트하면서 모듈 네임스페이스에는 옛 이름으로 바인딩하는 방식입니다. 이는 키워드가 아직 사용되지 않은 경우에 해당합니다. 키워드가 이미 사용된 경우에는 재할당된 이름은 그대로 두고 임포트되는 모듈만 바꾸면 됩니다. fix_imports 픽서가 이 방식을 보여 주는 한 예입니다.

Python 3.0

  1. 이름 변경을 지원하도록 sandbox에 있는 2to3을 갱신하십시오.
  2. svn move를 사용하여 모듈의 이름을 변경하십시오.
  3. 표준 라이브러리의 모든 import 문이 새 이름을 사용하도록 갱신하십시오(가장 쉬운 방법은 2to3의 fix_imports 픽서를 사용하는 것입니다).
  4. 모듈 자체의 문서에서 모듈 이름을 변경하십시오.
  5. 문서에 있는 모든 참조를 옛 이름에서 새 이름으로 갱신하십시오.
  6. regrtest.py -uall을 실행하여 이름 변경이 제대로 되었는지 확인하십시오.
  7. Misc/NEWS에 항목을 추가하십시오.
  8. 변경 사항을 커밋하십시오.

Python 2.6

  1. 모듈 문서에 이 모듈의 이름이 Python 3.0에서 변경된다는 참고 사항을 추가하십시오.:
    .. note::
       The :mod:`OLDNAME` module has been renamed to :mod:`NEWNAME` in
       Python 3.0.
    
  2. 문서 변경 사항을 커밋하십시오.
  3. 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 툴킷이 없게 됩니다.

새로운 최상위 패키지 도입

표준 라이브러리 전체를 별도의 패키지 안에 두자는 제안이 있었습니다. 이 문제에는 자체적인 설계 문제(이름 짓기, import 의미론에서 특별히 고려할 가치가 있는지 등)가 있으므로 이 PEP에서는 다루지 않습니다. 새로운 최상위 패키지가 도입되면 이 PEP의 모든 내용은 쉽게 처리할 수 있습니다.

주제별 모듈을 담을 새 패키지 도입

이 PEP를 작성하는 동안 표준 라이브러리에 특정 주제들이 나타난다는 점이 눈에 띄었습니다. 과거에 사람들은 비슷한 주제(예: 오디오)를 공유하는 모듈들을 모으는 데 도움이 되도록 새 패키지를 도입하자고 제안해 왔습니다. 도입할 새 패키지 몇 가지를 제안하기 위해 미해결 문제(Open Issue)가 만들어졌습니다.

하지만 결국 이 아이디어를 추진할 만큼 충분한 지지를 모으지 못했습니다. 그 대신 앞으로 작성할 PEP들의 지침으로 이름 단순화를 택했습니다.

참고 문헌