यह स्पष्ट नहीं है कि आप अपने स्थानीय नामस्थान में क्या करने का प्रयास कर रहे हैं। मुझे लगता है कि आप my_method
स्थानीय के रूप में output = my_method()
टाइप करना चाहते हैं?
# This is equivalent to "from a.b.myfile import my_method"
the_module = importlib.import_module("a.b.myfile")
same_module = __import__("a.b.myfile")
# import_module() and __input__() only return modules
my_method = getattr(the_module, "my_method")
# or, more concisely,
my_method = getattr(__import__("a.b.myfile"), "my_method")
output = my_method()
आप केवल स्थानीय नाम स्थान के लिए my_method
जोड़ने के दौरान, आप मॉड्यूल की श्रृंखला लोड है। आप आयात से पहले और बाद में sys.modules
की चाबियाँ देखकर परिवर्तन देख सकते हैं। मुझे उम्मीद है कि यह आपके अन्य उत्तरों की तुलना में स्पष्ट और अधिक सटीक है।
पूर्णता के लिए, इस तरह आप पूरी श्रृंखला जोड़ते हैं।
# This is equivalent to "import a.b.myfile"
a = __import__("a.b.myfile")
also_a = importlib.import_module("a.b.myfile")
output = a.b.myfile.my_method()
# This is equivalent to "from a.b import myfile"
myfile = __import__("a.b.myfile", fromlist="a.b")
also_myfile = importlib.import_module("a.b.myfile", "a.b")
output = myfile.my_method()
और अंत में, यदि आप __import__()
का उपयोग कर रहे हैं और आप पथ खोज के बाद कार्यक्रम शुरू कर दिया संशोधित किया है, तो आप __import__(normal args, globals=globals(), locals=locals())
उपयोग करने की आवश्यकता हो सकती है। एक जटिल चर्चा क्यों है।
स्रोत
2013-06-07 04:50:50
मैं 2.6.5 का उपयोग करें। क्या मैं '__future__' चीज़ से' कर सकता हूं? –
नहीं, '__future__' भाषा सुविधाओं के लिए है, न कि नए stdlib मॉड्यूल। – ThiefMaster
ऊपर दिए गए उदाहरणों में बित-इन '__import__' का उपयोग करें। यह 2.5 से पहले और बिना कीवर्ड के, काम करता है। –