কম্পিউটার টিউটোরিয়াল

পাইথন `__import__()` ফাংশন - রানটাইমে ডাইনামিক মডিউল ইমপোর্ট

`__import__()` ফাংশন কি?

পাইথনের বিল্ট-ইন `__import__()` ফাংশনটি রানটাইমে ডাইনামিকভাবে মডিউল ইমপোর্ট করতে ব্যবহৃত হয়। সাধারণত import স্টেটমেন্ট কম্পাইল-টাইমে কাজ করে, কিন্তু `__import__()` ফাংশন কল করেই ডাইনামিকভাবে মডিউল লোড করা যায়।

সিনট্যাক্স

__import__(name, globals=None, locals=None, fromlist=(), level=0)
  • name: মডিউল নাম (স্ট্রিং)।
  • globals/locals: নাম রেজোলিউশনের কনটেক্সট।
  • fromlist: সাবমডিউল বা অবজেক্ট লিস্ট যা ইমপোর্ট হবে।
  • level: ০ = অ্যাবসোলিউট ইমপোর্ট, >০ = রিলেটিভ ইমপোর্ট।

উদাহরণ: datetime মডিউল ডাইনামিক ইমপোর্ট

# রানটাইমে datetime ইমপোর্ট
dttime = __import__('datetime', globals(), locals(), [], 0)
print(dttime.datetime.now())  # 2021-01-12 07:38:54.903330

# কপি করে কাস্টম ফরম্যাটিং
x = dttime.datetime.now()
print(x.strftime("%d-%B"))  # 12-January

আউটপুট

2021-01-12 07:38:54.903330
12-January

কেন `__import__()` ব্যবহার করা উচিত নয় (Discouraged)

  1. পাঠযোগ্যতা: import module বা from module import name বেশি পঠনীয়।
  2. পারফরম্যান্স: টপ-লেভেল ইমপোর্ট ক্যাশে হয়, রানটাইম ইমপোর্ট স্লো।
  3. স্ট্যাটিক অ্যানালাইসিস: লিন্টার, IDE, টাইপ চেকার ডাইনামিক ইমপোর্ট ট্র্যাক করতে পারে না।
  4. নেমস্পেস পলিউশন: অপ্রত্যাশিত গ্লোবাল নেমস্পেস পরিবর্তন।

বিকল্প: `importlib.import_module()` (সুপারিশ করা)

import importlib

# ডাইনামিক ইমপোর্ট (আধুনিক API)
mod = importlib.import_module('datetime')
print(mod.datetime.now())

# সাবমডিউল
json_mod = importlib.import_module('json')
print(json_mod.dumps({'a': 1}))

উপযোগী কেস

  • প্লাগইন সিস্টেম (প্লাগইন নাম কনফিগ থেকে পাওয়া যায়)।
  • অপশনাল ডিপেন্ডেন্সি (মডিউল আছে কিনা চেক করে লোড)।
  • হট রিলোডিং / ডেভেলপমেন্ট টুলস।

সারসংক্ষেপ: `__import__()` জানা ভালো, কিন্তু প্রোডাকশন কোডে importlib.import_module() বা স্ট্যাটিক ইমপোর্ট ব্যবহার করুন।

  1. পাইথনে issubset() ফাংশন

  2. পাইথনে intersection() ফাংশন

  3. পাইথন getpass মডিউল

  4. পাইথন মডিউলের সব ফাংশন লিস্ট করা