हां, आप फॉर लूप में पायथन मॉड्यूल को पुनरावृत्त रूप से इम्पोर्ट कर सकते हैं। आपके पास उन मॉड्यूल की सूची होनी चाहिए जिन्हें आप स्ट्रिंग के रूप में इम्पोर्ट करना चाहते हैं। आप बिल्ट-इन `importlib.import_module(module_name)` का उपयोग करके मॉड्यूल इम्पोर्ट कर सकते हैं।
उदाहरण
>>> import importlib
>>> modnames = ["os", "sys", "math"]
>>> for lib in modnames:
... globals()[lib] = importlib.import_module(lib)
`globals()` कॉल एक डिक्ट लौटाता है। हम आयात किए गए मॉड्यूल पर लौटाए गए ऑब्जेक्ट के रूप में प्रत्येक लाइब्रेरी के लिए `lib` कुंजी सेट कर सकते हैं।
बेहतर दृष्टिकोण: डिक्शनरी लौटाएं
`globals()` को प्रदूषित करने के बजाय, एक डिक्शनरी लौटाएं:
import importlib
def import_modules(module_names):
"""मॉड्यूल नामों की सूची इम्पोर्ट करें और {नाम: मॉड्यूल} डिक्ट लौटाएं।"""
modules = {}
for name in module_names:
try:
modules[name] = importlib.import_module(name)
except ImportError as e:
print(f"मॉड्यूल '{name}' इम्पोर्ट करने में विफल: {e}")
modules[name] = None
return modules
# उपयोग
modules = import_modules(['os', 'sys', 'math', 'json', 'nonexistent'])
os_module = modules['os']
json_module = modules['json']
पैकेज से सबमॉड्यूल इम्पोर्ट करें
import importlib
submodules = ['json', 'csv', 'xml.etree.ElementTree']
modules = {name: importlib.import_module(name) for name in submodules}
उन्नत: प्लगइन डिस्कवरी पैटर्न
import importlib
import pkgutil
def discover_plugins(package_name):
"""पैकेज में सभी सबमॉड्यूल खोजें और इम्पोर्ट करें।"""
package = importlib.import_module(package_name)
plugins = {}
for importer, modname, ispkg in pkgutil.iter_modules(package.__path__):
full_name = f"{package_name}.{modname}"
try:
plugins[modname] = importlib.import_module(full_name)
except ImportError:
pass
return plugins
# उपयोग: mypackage.plugins में सभी प्लगइन लोड करें
plugins = discover_plugins('mypackage.plugins')
सावधानियां
- `globals()` इंजेक्शन से बचें - नेमस्पेस प्रदूषण का कारण बनता है
- त्रुटि संचालन करें (`try/except ImportError`)
- अविश्वसनीय इनपुट से डायनामिक इम्पोर्ट न करें
- प्रदर्शन: आवश्यकता होने पर ही इम्पोर्ट करें (लेजी लोडिंग)