เมื่อคุณต้องการเพิ่มพาธการค้นหาโมดูลสำหรับแพ็คเกจเฉพาะและทำงานกับทรัพยากรที่รวมอยู่ในแพ็คเกจ คุณต้องใช้โมดูล pkgutil จากไลบรารี Python ประกอบด้วยฟังก์ชันสำหรับเปลี่ยนกฎการนำเข้าสำหรับแพ็คเกจ Python นอกจากนี้ยังสามารถโหลดทรัพยากรที่ไม่ใช่รหัสจากไฟล์ที่แจกจ่ายภายในแพ็คเกจได้
extend_path(เส้นทาง ชื่อ)
ขยายเส้นทางการค้นหาสำหรับโมดูลที่ประกอบด้วยแพ็คเกจ วัตถุประสงค์การใช้งานคือการวางรหัสต่อไปนี้ใน __init__.py
. ของแพ็คเกจimport pkgutil __path__ = pkgutil.extend_path(__path__, __name__)
extend_path() สแกน sys.path สำหรับไดเร็กทอรีที่มีไดเร็กทอรีย่อยที่มีชื่อสำหรับแพ็กเกจที่กำหนดเป็นอาร์กิวเมนต์ที่สอง รายการไดเร็กทอรีถูกรวมเข้ากับค่าพาธที่ส่งผ่านเป็นอาร์กิวเมนต์แรก และส่งคืนเป็นรายการเดียว เหมาะสำหรับใช้เป็นพาธการนำเข้าแพ็กเกจ
find_loader(ชื่อเต็ม): เรียกตัวโหลดโมดูลสำหรับชื่อเต็มที่กำหนด
get_importer(path_item): ดึงตัวค้นหาสำหรับ path_item ที่กำหนด
get_loader(module_or_name)
รับวัตถุตัวโหลดสำหรับ module_or_name
iter_importers(fullname=''): วัตถุตัวค้นหาผลตอบแทนสำหรับชื่อโมดูลที่กำหนด
iter_modules(path=None, prefix=''): ผลตอบแทน ModuleInfo สำหรับโมดูลย่อยทั้งหมดบนพาธ หรือหากพาธเป็น None โมดูลระดับบนสุดทั้งหมดบน sys.path
>>> pk = pkgutil.iter_modules() >>> for p in pk: print (p[1])
walk_packages(path=None, prefix='', onerror=None): ให้ผล ModuleInfo สำหรับโมดูลทั้งหมดแบบเรียกซ้ำบนพาธ หรือถ้าพาธเป็น None โมดูลที่สามารถเข้าถึงได้ทั้งหมด
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):ส่งคืน namedtuple ที่มีข้อมูลสรุปสั้นๆ ของข้อมูลของโมดูล