आप निम्नलिखित चाल कर सकते हैं के लिए काम नहीं कर रहा:
>>> import importlib
>>> globals().update(importlib.import_module('math').__dict__)
>>> sin
<built-in function sin>
चेतावनी दी हो मॉड्यूल उपलब्ध में सभी के नाम करता है कि स्थानीय स्तर पर है, इसलिए यह थोड़ा अलग है *
से अधिक क्योंकि यह __all__
से शुरू नहीं होता है, उदाहरण के लिए यह __name__
, __package__
, __loader__
, __doc__
ओवरराइड भी करेगा।
अद्यतन: जवाब और अधिक संपूर्ण बनाने के लिए मदद करने के लिए वियतनाम जी वीयू के
module = importlib.import_module('math')
globals().update(
{n: getattr(module, n) for n in module.__all__} if hasattr(module, '__all__')
else
{k: v for (k, v) in module.__dict__.items() if not k.startswith('_')
})
विशेष धन्यवाद:
यहाँ एक अधिक सटीक और सुरक्षित संस्करण के रूप में @mata comments में बताया है।
आप ऐसा करने की कोशिश क्यों कर रहे हैं? '*' -इम्पोर्ट्स आम तौर पर फंसे हुए होते हैं, वे नेमस्पेस को अव्यवस्थित करते हैं और आप उन चीजों को आयात कर सकते हैं जिन्हें आप इरादा नहीं करते थे (उदाहरण के लिए एक मॉड्यूल अपडेट किया गया है, एक नया फ़ंक्शन प्राप्त करता है जो पहले के आयात को ओवरराइड करता है)। क्या आपके पास गतिशील रूप से ऐसा करने के लिए ठोस उपयोग है? – mata
मुझे पता है कि 'आयात *' ध्वनि खतरनाक है; हालांकि यह सरल उपयोग के मामले के लिए काम करता है। मेरा कंक्रीट यूजकेस यह है कि मैं 'पायथन परीक्षण' चलाने के लिए 'प्रोबोस्किस' का उपयोग करने की कोशिश कर रहा हूं जो मुझे परीक्षण परीक्षा को चलाने के लिए अनुमति देता है - चयनित परीक्षण सूट परीक्षण फ़ाइल नामों की एक सरणी द्वारा परिभाषित किया जाता है। –