การใช้โมดูล 'zipimport' ทำให้สามารถนำเข้าโมดูลและแพ็คเกจ Python จากไฟล์เก็บถาวรรูปแบบ ZIP ได้ โมดูลนี้ยังอนุญาตให้รายการของ sys.path เป็นสตริงที่ตั้งชื่อไฟล์ ZIP ที่เก็บถาวร ไฟล์ใดๆ อาจมีอยู่ในไฟล์ ZIP แต่มีเพียงไฟล์ .py และ .pyc เท่านั้นที่สามารถนำเข้าได้ ไม่อนุญาตให้นำเข้า ZIP ของโมดูลไดนามิก
การทำงานของโมดูลนี้อธิบายได้ด้วยการสร้างไฟล์ zip ในไดเร็กทอรี 'newdir' ก่อน ไฟล์ต่อไปนี้จะถือว่ามีอยู่ในไดเรกทอรี newdir
['guess.py', 'hello.py', 'impzip.py', 'mytest.py', 'prime.py', 'prog.py', 'tmp.py']
import sys, glob import zipfile files = glob.glob("*.py") print (files) zf = zipfile.PyZipFile('zipimp.zip', mode='w') for file in files: zf.write(file) zf.close()
ตอนนี้เราใช้ 'zipimp.zip' ในส่วนที่เหลือของบทความ
โมดูล 'zipimport' กำหนด zipimporter คลาสที่กำหนดวิธีการดังต่อไปนี้
zipimporter ()
เมธอดนี้เป็นคอนสตรัคเตอร์ที่สร้างอินสแตนซ์ zipimporter ใหม่ มันต้องมีพาธไปยังอาร์กิวเมนต์ของไฟล์ ZIP ZipImportError จะปรากฏขึ้นหากไม่ใช่ไฟล์ ZIP ที่ถูกต้อง
>>> import zipimport >>> importer = zipimport.zipimporter('zipimp.zip')
find_module()
เมธอดนี้หาโมดูลที่ระบุ โดยจะส่งคืนอินสแตนซ์ zipimporter หากพบโมดูล หรือไม่มีหากไม่พบ
>>> ret=importer.find_module('prime') >>> ret <zipimporter object "zipimp.zip"> >>> ret=importer.find_module('sample') >>> ret >>> print (ret) None
get_code()
เมธอดนี้ส่งคืนอ็อบเจ็กต์โค้ดสำหรับโมดูลที่ระบุ ยก ZipImportError หากไม่พบโมดูล
>>> prog=importer.get_code('prime') >>> print (prog) <code object <module> at 0x022A4650, file "zipimp.zip\prime.py", line 1>
load_module()
วิธีนี้จะโหลดโมดูลที่ระบุ ส่งคืนโมดูลที่นำเข้าหรือเพิ่ม ZipImportError หากไม่พบ
>>> importer = zipimport.zipimporter('zipimp.zip') >>> mod=importer.load_module('prog') 30 >>> mod.__name__ 'prog' >>> mod.__file__ 'zipimp.zip\\prog.py' >>> mod.__loader__ <zipimporter object "zipimp.zip">
get_source()
เมธอดนี้ส่งคืนซอร์สโค้ดสำหรับโมดูลที่ระบุ
>>> prog=importer.get_source('prime') >>> print (prog) def isprime(x): for i in range(2,x-1): if x%i==0: return False else: return True f = int(input()) l = int(input()) primelist = list(filter(isprime, range(f,l))) print ("prime1", "prime2", "composites") composites=[(primelist[i-1], primelist[i],(primelist[i]-1)-primelist[i-1]) for i in range(1,len(primelist))] print (composites)