Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

ยูทิลิตี้ส่วนขยายแพ็คเกจใน Python


เมื่อคุณต้องการเพิ่มพาธการค้นหาโมดูลสำหรับแพ็คเกจเฉพาะและทำงานกับทรัพยากรที่รวมอยู่ในแพ็คเกจ คุณต้องใช้โมดูล 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 ที่มีข้อมูลสรุปสั้นๆ ของข้อมูลของโมดูล