Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Package extension utility trong Python (pkgutil)

Module pkgutil trong thư viện chuẩn cung cấp công cụ mở rộng đường dẫn tìm kiếm module cho package và làm việc với resource bên trong package.

Chức năng chính

  • Mở rộng import path cho package (extend_path).
  • Tìm loader, importer cho module.
  • Duyệt các submodule, package (iter_modules, walk_packages).
  • Đọc resource non-code từ file trong package.

extend_path(path, name)

Mở rộng đường dẫn tìm kiếm cho các module cấu thành package. Dùng trong __init__.py của package:

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

Quét sys.path tìm thư mục con tên package, kết hợp với path gốc trả về list thống nhất.

Các hàm quan trọng khác

HàmMô tả
find_loader(fullname)Lấy module loader cho fullname
get_importer(path_item)Lấy finder cho path_item
get_loader(module_or_name)Lấy loader object
iter_importers(fullname='')Yield finder objects cho module name
iter_modules(path=None, prefix='')Yield ModuleInfo cho submodules trên path (hoặc top-level trên sys.path)
walk_packages(path=None, prefix='', onerror=None)Yield ModuleInfo đệ quy cho tất cả module trên path

Ví dụ: Liệt kê tất cả module top-level

import pkgutil
for module_info in pkgutil.iter_modules():
    print(module_info.name)

Ví dụ: Duyệt đệ quy package

import pkgutil
import sys

def explore_package(module_name):
    loader = pkgutil.get_loader(module_name)
    if loader is None or not hasattr(loader, 'filename'):
        return
    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)

explore_package('os')

ModuleInfo

Named tuple: ModuleInfo(module_finder, name, ispkg) - tóm tắt thông tin module.

Ứng dụng thực tế

  • Plugin system: Tự động khám phá và load plugin từ thư mục.
  • Namespace package: Chia package trên nhiều thư mục/phân phối.
  • Introspection: Phân tích cấu trúc package tại runtime.