Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python의 패키지 확장 유틸리티

<시간/>

특정 패키지에 대한 모듈 검색 경로를 추가하고 패키지에 포함된 리소스로 작업하려면 Python 라이브러리의 pkgutil 모듈을 사용해야 합니다. 여기에는 Python 패키지에 대한 가져오기 규칙을 변경하는 기능이 포함됩니다. 패키지 내에 배포된 파일에서 코드가 아닌 리소스를 로드하는 것도 가능합니다.

extend_path(경로, 이름)

패키지를 구성하는 모듈의 검색 경로를 확장합니다. 의도된 사용은 패키지의 __init__.py

에 다음 코드를 배치하는 것입니다.
import pkgutil
__path__ = pkgutil.extend_path(__path__, __name__)

extend_path()는 sys.path에서 두 번째 인수로 지정된 패키지에 대해 명명된 하위 디렉터리를 포함하는 디렉터리를 검색합니다. 디렉토리 목록은 첫 번째 인수로 전달된 경로 값과 결합되어 패키지 가져오기 경로로 사용하기에 적합한 단일 목록으로 반환됩니다.

find_loader(이름): 주어진 전체 이름에 대한 모듈 로더를 검색합니다.

get_importer(경로_항목): 주어진 path_item에 대한 파인더를 검색합니다.

get_loader(module_or_name)

module_or_name에 대한 로더 개체를 가져옵니다.

iter_importers(fullname=''): 주어진 모듈 이름에 대한 수율 찾기 개체입니다.

iter_modules(경로=없음, 접두사=''): 경로의 모든 하위 모듈에 대해 ModuleInfo를 생성하거나 경로가 없음인 경우 sys.path의 모든 최상위 모듈에 대해 생성합니다.

>>> pk = pkgutil.iter_modules()
>>> for p in pk:
   print (p[1])

walk_packages(경로=없음, 접두사='', onerror=없음): 경로에서 재귀적으로 모든 모듈에 대한 ModuleInfo를 생성하거나 경로가 없음인 경우 액세스 가능한 모든 모듈을 생성합니다.

import pkgutil
import sys
def explore_package(module_name):
   loader = pkgutil.get_loader(module_name)
   for sub_module in pkgutil.walk_packages([loader.filename]):
      _, sub_module_name, _ = sub_module
      qname = module_name + "." + sub_module_name
      print(qname)
      explore_package(qname)

ModuleInfo(module_finder, name, ispkg):모듈 정보에 대한 간략한 요약을 포함하는 명명된 튜플을 반환합니다.