pkgutil — 패키지 확장 유틸리티

pkgutil — 패키지 확장 유틸리티

pkgutil 모듈은 import 시스템, 특히 패키지 지원을 위한 유틸리티를 제공해요. 하나의 논리적 패키지를 여러 디렉터리로 나눠 배포하거나, 패키지 안의 모듈들을 열거할 때 유용해요.

출처: Python documentation

본문

  • class pkgutil.ModuleInfo(module_finder, name, ispkg) — 모듈 정보의 짧은 요약을 담는 namedtuple 이에요. 버전 3.6에서 추가.

  • pkgutil.extend_path(path, name) — 패키지를 구성하는 모듈들의 검색 경로를 확장해요. 의도된 사용법은 패키지의 __init__.py 에 다음 코드를 넣는 것이에요:

from pkgutil import extend_path
__path__ = extend_path(__path__, __name__)

sys.path 의 각 디렉터리 중 패키지 이름과 일치하는 하위 디렉터리가 있으면 그 하위 디렉터리를 패키지의 __path__ 에 추가해요. 하나의 논리적 패키지의 서로 다른 부분을 여러 디렉터리로 배포하고 싶을 때 유용해요.

또한 * 가 name 인자와 일치하는 위치에서 시작하는 *.pkg 파일도 찾아요. 이 기능은 *.pth 파일(site 모듈 참고)과 비슷하지만 import 로 시작하는 줄을 특별 취급하지 않는 점이 달라요. *.pkg 파일은 그 내용을 신뢰해요 — 빈 줄 건너뛰기와 주석 무시를 제외하면 *.pkg 파일의 모든 항목이 파일 시스템에 실제로 존재하는지와 무관하게 경로에 추가돼요(이것은 기능이에요).

입력 경로가 리스트가 아니면(예: frozen 패키지) 변경 없이 그대로 반환돼요. 입력 경로는 수정되지 않으며, 확장된 복사본이 반환돼요. 항목은 복사본의 끝에만 추가돼요.

sys.path 가 시퀀스라고 가정해요. 기존 디렉터리를 가리키지 않는 문자열이 아닌 sys.path 항목은 무시돼요. 파일 이름으로 사용될 때 오류를 일으키는 sys.path 의 Unicode 항목은 이 함수가 예외를 발생시킬 수 있어요(os.path.isdir() 동작과 일치).

  • pkgutil.get_importer(path_item) — 주어진 path_item 의 파인더를 검색해요. 반환된 파인더가 path hook 에 의해 새로 만들어졌다면 sys.path_importer_cache 에 캐시돼요. sys.path_hooks 의 재검색이 필요하면 캐시(또는 그 일부)를 수동으로 지울 수 있어요. 버전 3.3에서 패키지 내부 PEP 302 import 에뮬레이션 대신 importlib 에 직접 기반하도록 업데이트됐어요.

  • pkgutil.iter_importers(fullname='') — 주어진 모듈 이름에 대한 파인더 객체들을 생성(yield)해요. fullname'.' 를 포함하면 파인더는 fullname 을 포함하는 패키지에 대한 것이고, 그 외에는 등록된 모든 최상위 파인더(즉 sys.meta_pathsys.path_hooks 양쪽)가 돼요. 이름 있는 모듈이 패키지 안에 있으면 이 함수 호출의 부작용으로 그 패키지가 import 돼요. 모듈 이름을 지정하지 않으면 모든 최상위 파인더가 생성돼요.

  • pkgutil.iter_modules(path=None, prefix='')path 의 모든 하위 모듈에 대한 ModuleInfo 를 생성하거나, pathNone 이면 sys.path 의 모든 최상위 모듈에 대한 것을 생성해요. path 는 경로 문자열들의 시퀀스여야 해요. 각 모듈 이름에는 prefix 가 미리 붙어요.

  • pkgutil.walk_packages(path=None, prefix='', onerror=None)path 의 모든 모듈에 대한 ModuleInfo 를 재귀적으로 생성해요. iter_modules() 와 비슷하지만 하위 패키지 안의 모든 모듈을 포함해요. import 오류가 발생하면 onerror 핸들러가 호출돼요.

더 알아보기 (Learn more)