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

การ Import โมดูล Python จาก Zip Archives (zipimport)


การใช้โมดูล 'zipimport' ทำให้เป็นไปได้ที่จะ import โมดูลและแพ็กเกจ Python จาก ZIP-format archives โมดูลนี้ยังอนุญาตให้รายการของ sys.path เป็นสตริงที่命名 ZIP file archive ไฟล์ใดๆ อาจมีอยู่ใน ZIP archive แต่มีเพียงไฟล์ .py และ .pyc เท่านั้นที่พร้อมสำหรับ import ZIP import ของ dynamic modules ไม่ได้รับอนุญาต

ฟังก์ชันการทำงานของโมดูลนี้อธิบายโดยการสร้าง zip archive ของไฟล์ในไดเรกทอรี '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()

เมธอดนี้เป็น constructor ที่สร้าง zipimporter instance ใหม่ มันต้องการ path ไปยัง ZIP file เป็นอาร์กิวเมนต์ ZipImportError จะถูกยกขึ้นหากไม่ใช่ ZIP archive ที่ถูกต้อง

>>> import zipimport >>> importer = zipimport.zipimporter('zipimp.zip')

find_module()

เมธอดนี้ค้นหาโมดูลที่ระบุ มันคืนค่า zipimporter instance หากโมดูลถูกพบ หรือ None หากไม่พบ

>>> ret=importer.find_module('prime') >>> ret  >&>>>> ret=importer.find_module('sample') >>> ret >>> print (ret) None

get_code()

เมธอดนี้คืนค่า code object สำหรับโมดูลที่ระบุ ยก ZipImportError หากโมดูลไม่สามารถหาได้

>>> prog=importer.get_code('prime') >>> print (prog)  at 0x022A4650, file "zipimp.zip\prime.py", line 1>

load_module()

เมธอดนี้โหลดโมดูลที่ระบุ มันคืนค่า imported module หรือยก ZipImportError หากไม่พบ

>>> importer = zipimport.zipimporter('zipimp.zip') >>> mod=importer.load_module('prog') 30 >>> mod.__name__ 'prog' >>> mod.__file__ 'zipimp.zip\\prog.py' >>> mod.__loader__ 

get_source()

เมธอดนี้คืนค่า source code สำหรับโมดูลที่ระบุ

>>> 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)