แพ็คเกจ importlib จัดเตรียมการใช้งานคำสั่งนำเข้าในซอร์สโค้ด Python แบบพกพาไปยังล่าม Python นอกจากนี้ยังจัดให้มีการใช้งานที่เข้าใจง่ายกว่าการใช้งานในภาษาการเขียนโปรแกรมอื่นที่ไม่ใช่ Python
แพ็คเกจนี้ยังเปิดเผยส่วนประกอบต่างๆ เพื่อดำเนินการนำเข้า ซึ่งทำให้ผู้ใช้สร้างออบเจ็กต์ที่กำหนดเองของตนเอง (เรียกว่าผู้นำเข้า) ได้ง่ายขึ้นเพื่อเข้าร่วมในกระบวนการนำเข้า
แพ็คเกจ importlib มีฟังก์ชันสำคัญที่ชื่อว่า import_module()
import_module():
ฟังก์ชันนี้จะนำเข้าโมดูลโดยทางโปรแกรม ชื่อของโมดูลคือพารามิเตอร์ตัวแรกของฟังก์ชัน พารามิเตอร์ตัวเลือกที่สองระบุชื่อแพ็คเกจ หากมี
invalidate_caches():
ฟังก์ชันนี้ทำให้แคชภายในของตัวค้นหาเป็นโมฆะ ควรเรียกใช้ฟังก์ชันนี้หากมีการสร้าง/ติดตั้งโมดูลใดๆ ในขณะที่โปรแกรมของคุณกำลังทำงานเพื่อรับประกันว่าผู้ค้นหาทั้งหมดจะสังเกตเห็นการมีอยู่ของโมดูลใหม่
โหลดซ้ำ():
ฟังก์ชันนี้จะรีโหลดโมดูลที่นำเข้าก่อนหน้านี้ สิ่งนี้มีประโยชน์หากคุณได้แก้ไขไฟล์ต้นฉบับของโมดูลโดยใช้ตัวแก้ไขภายนอก และต้องการลองใช้เวอร์ชันใหม่โดยไม่ต้องออกจากล่าม Python
ตัวอย่าง:
สร้างสคริปต์ Python สองรายการชื่อ module1.py และ module2.py โดยมีรหัสเดียวกันดังต่อไปนี้:
#module1 def main(): print ('module imported', __name__) return if __name__=='__main__': main()
ตอนนี้เรานำเข้าโมดูลเหล่านี้แบบไดนามิกโดยใช้แพ็คเกจ importlib
>>> import importlib >>> mod=importlib.import_module('module1') >>> mod.__name__ 'module1' >>> mod=importlib.import_module('module2') >>> mod.__name__ 'module2' >>> mod.main() module imported module2 >>>
แพ็คเกจ importlib มีโมดูลย่อยดังต่อไปนี้:
importlib.abc
โมดูลนี้มีคลาสพื้นฐานที่เป็นนามธรรมหลักทั้งหมดที่ใช้โดยการนำเข้า คลาสย่อยบางคลาสของคลาสพื้นฐานที่เป็นนามธรรมหลักยังถูกจัดเตรียมไว้เพื่อช่วยในการใช้งาน ABC หลัก
importlib.resources
โมดูลนี้ใช้ประโยชน์จากระบบนำเข้าของ Python เพื่อให้สามารถเข้าถึงทรัพยากรภายในแพ็คเกจได้
importlib.machinery
โมดูลนี้มีอ็อบเจ็กต์ต่างๆ ที่ช่วยนำเข้าค้นหาและโหลดโมดูล
importlib.util
โมดูลนี้มีรหัสยูทิลิตี้สำหรับผู้นำเข้า ประกอบด้วยวัตถุต่าง ๆ ที่ช่วยในการสร้างผู้นำเข้า มีการกำหนดหน้าที่ที่สำคัญดังต่อไปนี้
find_spec():
ฟังก์ชันนี้จะค้นหาข้อมูลจำเพาะสำหรับโมดูล สัมพันธ์กับชื่อแพ็คเกจที่ระบุ หากชื่อเป็นโมดูลย่อย (มีจุด) โมดูลหลักจะถูกนำเข้าโดยอัตโนมัติ ชื่อและแพ็คเกจทำงานเหมือนกับ import_module()
module_from_spec(spec)
สร้างโมดูลใหม่ตามข้อมูลจำเพาะและ spec.loader.create_module
ตัวอย่าง:
import importlib.util def check_module(mod): spec = importlib.util.find_spec(mod) if spec is None: print('Module: {} not found'.format(mod)) return None else: print('Module: {} can be imported!'.format(mod)) return spec def import_module(spec): mod = importlib.util.module_from_spec(spec) spec.loader.exec_module(mod) return mod if __name__ == '__main__': spec = check_module('notamodule') spec = check_module('module1') if spec: mod = import_module(spec) mod.main()
ผลลัพธ์:
Module: notamodule not found Module: module1 can be imported! module imported module1