importlib প্যাকেজটি পাইথন সোর্স কোডে import স্টেটমেন্টের বাস্তবায়ন প্রদান করে যা যেকোনো পাইথন ইন্টারপ্রেটারে পোর্টেবল। এটি এমন একটি বাস্তবায়ন প্রদান করে যা পাইথন ব্যতীত অন্য প্রোগ্রামিং ল্যাঙ্গুয়েজে বাস্তবায়িত VERSION চেয়ে সহজে বোঝা যায়।
এই প্যাকেজটি ইম্পোর্ট বাস্তবায়নের কম্পোনেন্টগুলো এক্সপোজ করে, যা ইউজারদের নিজেদের কাস্টম অবজেক্ট (যাকে ইম্পোর্টার বলা হয়) তৈরি করে ইম্পোর্ট প্রসেসে অংশগ্রহণ করতে সহায়তা করে।
importlib প্যাকেজে একটি গুরুত্বপূর্ণ ফাংশন রয়েছে: import_module()
import_module():
এই ফাংশনটি প্রোগ্রাম্যাটিক্যালি একটি মডিউল ইম্পোর্ট করে। মডিউলের নাম ফাংশনের প্রথম প্যারামিটার। অপশনাল দ্বিতীয় প্যারামিটার প্যাকেজের নাম নির্দেশ করে যদি থাকে।
invalidate_caches():
এই ফাংশনটি ফাইন্ডারদের ইন্টারনাল ক্যাশে অ্যামान्य (invalidate) করে। যদি আপনার প্রোগ্রাম চলাকালীন কোনো মডিউল তৈরি বা ইনস্টল হয়, তবে এই ফাংশনটি কল করা উচিত যাতে সব ফাইন্ডার নতুন মডিউলটির অস্তিত্ব লক্ষ্য করতে পারে।
reload():
এই ফাংশনটি পূর্বে ইম্পোর্ট করা একটি মডিউল রিলোড করে। এটি তখন উপকারী হয় যখন আপনি এক্সটার্নাল এডিটর ব্যবহার করে মডিউল সোর্স ফাইল এডিট করেছেন এবং পাইথন ইন্টারপ্রেটার ছাড়া বের হয়ে নতুন ভার্সন ট্রাই করতে চান।
উদাহরণ:
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
এই মডিউলটি পাইথনের ইম্পোর্ট সিস্টেম ব্যবহার করে প্যাকেজের ভেতরের রিসোর্সগুলোর অ্যাক্সেস প্রদান করে।
importlib.machinery
এই মডিউলটি মডিউল খুঁজে বের করে এবং লোড করতে সাহায্য করার বিভিন্ন অবজেক্ট ধারণ করে।
importlib.util
এই মডিউলটি ইম্পোর্টারদের জন্য ইউটিলিটি কোড ধারণ করে। এটি ইম্পোর্টার কনস্ট্রাকশনে সাহায্য করার বিভিন্ন অবজেক্ট ধারণ করে। নিচে গুরুত্বপূর্ণ ফাংশনগুলো দেওয়া হলো:
find_spec():
এই ফাংশনটি নির্দিষ্ট প্যাকেজের নামের সাপেক্ষে একটি মডিউলের স্পেসিফিকেশন খুঁজে বের করে। যদি নামটি একটি সাবমডিউলের জন্য হয় (ডট ধারণ করে), তবে প্যারেন্ট মডিউলটি স্বয়ংক্রিয়ভাবে ইম্পোর্ট হয়। নাম এবং প্যাকেজ import_module()-এর মতোই কাজ করে।
module_from_spec(spec)
spec এবং spec.loader.create_module alapján একটি নতুন মডিউল তৈরি করে।
উদাহরণ:
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