प्रलेखन आप को गुमराह के रूप में यह आयात करने के लिए और अधिक आम मामले का विवरण देने में लिखा है इसमें मौजूद मूल पैकेज के बाहर से एक मॉड्यूल।
उदाहरण के लिए, अपने कोड में "उदाहरण आयात सबमिशन से" का उपयोग करके, जहां "उदाहरण" कुछ तीसरी पार्टी लाइब्रेरी पूरी तरह से अपने कोड से अनकनेक्ट है, नाम "उदाहरण" को बाध्य नहीं करता है। यह अभी भी दोनों उदाहरण/__ init__.py और उदाहरण/submodule.py मॉड्यूल आयात करता है, दो मॉड्यूल ऑब्जेक्ट्स बनाते हैं, और दूसरे मॉड्यूल ऑब्जेक्ट में example.submodule असाइन करते हैं।
लेकिन, एक सबमिशन से नामों के "से .. आयात" को मूल पैकेज ऑब्जेक्ट पर सबमिशन विशेषता सेट करनी होगी। इस पर विचार करें कि यह नहीं हुआ:
पैकेज/__ init__.py पैकेज आयात होने पर निष्पादित करता है।
कि __init__ "सबमिशन आयात नाम से" करता है।
किसी बिंदु पर, अन्य पूरी तरह से अलग कोड "import.submodule आयात करें" करता है।
चरण 3 में, या तो sys.modules [ "package.submodule"] मौजूद नहीं है, ऐसी स्थिति में इसे फिर से लोड हो रहा है आप अलग-अलग दायरों में दो अलग मॉड्यूल वस्तुओं देगा; या sys.modules ["पैकेज।सबमिशन "] मौजूद होगा लेकिन" सबमिशन "पैरेंट पैकेज ऑब्जेक्ट (sys.modules [" package "]) की विशेषता नहीं होगी, और" import package.submodule "आयात नहीं करेगा। हालांकि, अगर यह कुछ भी नहीं करता है, तो आयात का उपयोग कोड पैकेज की विशेषता के रूप submodule उपयोग नहीं कर सकते!
सैद्धांतिक रूप से, कैसे आयात करने में एक submodule काम करता है बदला जा सकता है आयात मशीनरी के बाकी मैच के लिए बदल गया था अगर।
तुम सिर्फ जरूरत है यह जानने के लिए कि पैकेज पी से एक सबमिशन एस आयात करना क्या होगा, फिर संक्षेप में:
- सुनिश्चित करें कि पी आयात किया गया है, या अन्यथा आयात करें। (यह चरण "आयात A.B.C.D" को संभालने के लिए पुनरावृत्ति करता है।)
- मॉड्यूल ऑब्जेक्ट प्राप्त करने के लिए S.py निष्पादित करें। (.pyc फ़ाइलों, आदि के विवरण छोड़ना)
- sys.modules ["पीएस"] में स्टोर मॉड्यूल ऑब्जेक्ट।
setattr(sys.modules["P"], "S", sys.modules["P.S"])
- यदि वह आयात "आयात पीएस" फ़ॉर्म का था, तो स्थानीय क्षेत्र में "पी" बांधें।
स्रोत
2011-05-18 21:02:43
क्या आप वाकई पहले 'आयात मॉड्यूलबी' नहीं हैं? – JBernardo
हाँ, मुझे यकीन है। यही वह पूरी फाइल है जिस पर स्थिति को पुन: उत्पन्न किया जा सकता है। – yole
मैंने कोशिश की और यह Python2.7 पर काम करता है लेकिन Python3.2 पर नहीं ... – JBernardo