पायथन मॉड्यूल को डायनामिक रूप से इम्पोर्ट करने के लिए, आप `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` कुंजी सेट कर सकते हैं।
बेहतर दृष्टिकोण: globals() प्रदूषित न करें
import importlib
def dynamic_import(module_name):
"""मॉड्यूल डायनामिक रूप से इम्पोर्ट करें और लौटाएं।"""
return importlib.import_module(module_name)
def import_multiple(module_names):
"""कई मॉड्यूल इम्पोर्ट करें, {नाम: मॉड्यूल} डिक्ट लौटाएं।"""
result = {}
for name in module_names:
try:
result[name] = importlib.import_module(name)
except ImportError as e:
result[name] = e
return result
# उपयोग
modules = import_multiple(['os', 'sys', 'json', 'requests'])
os_mod = modules['os']
json_mod = modules['json']
पैकेज से सबमॉड्यूल इम्पोर्ट करें
import importlib
# datetime.date इम्पोर्ट करें
date_module = importlib.import_module('datetime.date')
# या पूर्ण पथ के साथ
full_path = 'datetime.date'
date_module = importlib.import_module(full_path)
importlib.util के साथ उन्नत नियंत्रण (पायथन 3.4+)
import importlib.util
import sys
def load_module_from_file(module_name, file_path):
"""किसी भी .py फ़ाइल से मॉड्यूल लोड करें।"""
spec = importlib.util.spec_from_file_location(module_name, file_path)
if spec is None:
raise ImportError(f"Cannot load module from {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_file('my_module', '/custom/path/my_module.py')
__import__ (लो-लेवल, अनुशंसित नहीं)
# पुराना तरीका - importlib पसंद करें
module = __import__('os', fromlist=['path'])
सुरक्षा चेतावनी
- कभी भी अविश्वसनीय उपयोगकर्ता इनपुट से डायनामिक इम्पोर्ट न करें
- इम्पोर्ट करने से पहले मॉड्यूल नामों को मान्य करें
- अनुमत मॉड्यूल की व्हाइटलिस्ट का उपयोग करें
उपयोग के मामले
- प्लगइन सिस्टम
- कॉन्फ़िगरेशन-आधारित फीचर लोडिंग
- लेजी लोडिंग (आवश्यकता पड़ने पर इम्पोर्ट)
- हॉट रीलोडिंग / डेवलपमेंट टूल्स