पायथन मॉड्यूल को डायनामिक रूप से इम्पोर्ट करने के लिए, आप `importlib` पैकेज के `import_module(moduleName)` फ़ंक्शन का उपयोग कर सकते हैं। आपके पास `moduleName` स्ट्रिंग के रूप में होना चाहिए।
बुनियादी उदाहरण
>>> from importlib import import_module
>>> moduleName = "os"
>>> globals()[moduleName] = import_module(moduleName)
मॉड्यूल की सूची डायनामिक रूप से इम्पोर्ट करें
>>> import importlib
>>> modnames = ["os", "sys", "math"]
>>> for lib in modnames:
... globals()[lib] = importlib.import_module(lib)
`globals()` कॉल एक डिक्ट लौटाता है। हम आयात किए गए मॉड्यूल पर लौटाए गए ऑब्जेक्ट के रूप में प्रत्येक लाइब्रेरी के लिए `lib` कुंजी सेट कर सकते हैं।
पैकेज से सबमॉड्यूल इम्पोर्ट करें
यदि आपने एक पैकेज इम्पोर्ट किया है और अब उसके मॉड्यूल में से एक को डायनामिक रूप से इम्पोर्ट करना चाहते हैं, तो आप अभी भी उसी फ़ंक्शन का उपयोग कर सकते हैं और अपेक्षित परिणाम प्राप्त कर सकते हैं। आप जिस मॉड्यूल को इम्पोर्ट करना चाहते हैं उसका पूरा नाम होना चाहिए न कि केवल मॉड्यूल नाम।
>>> import importlib
>>> pack = 'datetime'
>>> mod = 'date'
>>> globals()[pack] = importlib.import_module(pack)
>>> globals()[pack + '.' + mod] = importlib.import_module(pack + '.' + mod)
आधुनिक सर्वोत्तम अभ्यास (पायथन 3.7+)
importlib.import_module का उपयोग करें
import importlib
def dynamic_import(module_path: str):
"""डायनामिक रूप से मॉड्यूल इम्पोर्ट करें और लौटाएं।"""
return importlib.import_module(module_path)
# उपयोग
os_module = dynamic_import('os')
date_class = dynamic_import('datetime.date')
requests = dynamic_import('requests')
वैकल्पिक: importlib.util (अधिक नियंत्रण)
import importlib.util
import sys
def load_module_from_path(module_name, file_path):
"""फ़ाइल पथ से मॉड्यूल लोड करें।"""
spec = importlib.util.spec_from_file_location(module_name, file_path)
module = importlib.util.module_from_spec(spec)
sys.modules[module_name] = module
spec.loader.exec_module(module)
return module
# उपयोग
my_module = load_module_from_path('my_module', '/path/to/my_module.py')
सावधानियां
- `globals()` में इंजेक्शन नेमस्पेस प्रदूषित कर सकता है - एक डिक्शनरी लौटाने पर विचार करें
- त्रुटि संचालन: `ImportError`, `ModuleNotFoundError` पकड़ें
- सुरक्षा: अविश्वसनीय इनपुट से डायनामिक इम्पोर्ट न करें
- प्रदर्शन: बार-बार डायनामिक इम्पोर्ट धीमे होते हैं
उपयोग के मामले
- प्लगइन आर्किटेक्चर
- कॉन्फ़िगरेशन-चालित मॉड्यूल लोडिंग
- आलसी लोडिंग (लेजी लोडिंग)
- हॉट रीलोडिंग सिस्टम