'zipimport' মডিউল ব্যবহার করে ZIP ফরম্যাটের আর্কাইভ থেকে পাইথন মডিউল এবং প্যাকেজ ইম্পোর্ট করা সম্ভব। এই মডিউল sys.path-এর একটি আইটেমকে ZIP ফাইল আর্কাইভের নামযুক্ত স্ট্রিং হিসেবে ব্যবহার করার অনুমতি দেয়। ZIP আর্কাইভে যেকোনো ফাইল থাকতে পারে, কিন্তু শুধু .py এবং .pyc ফাইলগুলো ইম্পোর্টের জন্য উপলব্ধ। ডাইনামিক মডিউলের ZIP ইম্পোর্ট নিষিদ্ধ।
এই মডিউলের ফাংশনালিটি ব্যাখ্যা করার জন্য প্রথমে 'newdir' ডিরেক্টরির ফাইলগুলো থেকে একটি ZIP আর্কাইভ তৈরি করা হয়েছে। ধরে নেওয়া হয় 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 ফাইলের পাথ দরকার। এটি একটি বৈধ ZIP আর্কাইভ না হলে ZipImportError উত্থাপন করে।
>>> import zipimport >>> importer = zipimport.zipimporter('zipimp.zip')
find_module()
এই মেথডটি নির্দিষ্ট মডিউলটি খোঁজে। মডিউল পাওয়া গেলে zipimporter ইনস্ট্যান্স রিটার্ন করে, না পেলে None।
>>> 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)