sys.modulesशब्दकोश में मॉड्यूल नाम के लिए परीक्षण :
import sys
modulename = 'datetime'
if modulename not in sys.modules:
print 'You have not imported the {} module'.format(modulename)
डोक्यूमेंटेशन से:
यह एक ऐसा शब्दकोश है जो मॉड्यूल नामों को उन मॉड्यूलों में मैप करता है जो पहले ही लोड किए जा चुके हैं।
ध्यान दें कि एक importकथन दो काम करता है:
- यदि मॉड्यूल को पहले कभी आयात नहीं किया गया है (== मौजूद नहीं है
sys.modules), तो इसे लोड किया गया है और इसमें जोड़ा गया है sys.modules।
- वर्तमान नेमस्पेस में 1 या अधिक नामों को बांधें जो मॉड्यूल ऑब्जेक्ट या उन ऑब्जेक्ट्स का संदर्भ देते हैं जो मॉड्यूल नेमस्पेस के सदस्य हैं।
modulename not in sys.modulesयदि चरण 1 पर अभिव्यक्ति अभिव्यक्ति हुई है। चरण 2 के परिणाम के परीक्षण के लिए यह जानना आवश्यक है कि importविभिन्न वस्तुओं को संदर्भित करने के लिए विभिन्न नामों को निर्धारित करने के लिए क्या सटीक कथन का उपयोग किया गया था:
import modulename सेट modulename = sys.modules['modulename']
import packagename.nestedmoduleसेट packagename = sys.modules['packagename'](कोई भी अतिरिक्त स्तर जो आप जोड़ते हैं)
import modulename as altname सेट altname = sys.module['modulename']
import packagename.nestedmodule as altname सेट altname = sys.modules['packagename.nestedmodule']
from somemodule import objectname सेट objectname = sys.modules['somemodule'].objectname
from packagename import nestedmodulenameसेट nestedmodulename = sys.modules['packagename.nestedmodulename'](केवल जब इस आयात से पहले नाम स्थान nestedmodulenameमें कोई ऑब्जेक्ट नाम नहीं था packagename, नेस्टेड मॉड्यूल के लिए एक अतिरिक्त नाम इस बिंदु पर मूल पैकेज नामस्थान में जोड़ा गया है)
from somemodule import objectname as altname सेट altname = sys.modules['somemodule'].objectname
from packagename import nestedmodulename as altnameसेट altname = sys.modules['packagename.nestedmodulename'](केवल जब इस आयात से पहले नाम स्थान nestedmodulenameमें कोई ऑब्जेक्ट नाम नहीं था packagename, नेस्टेड मॉड्यूल के लिए एक अतिरिक्त नाम इस बिंदु पर मूल पैकेज नामस्थान में जोड़ा गया है)
आप परीक्षण कर सकते हैं कि जिस नाम से आयातित वस्तु बंधी थी, वह किसी दिए गए नामस्थान में मौजूद है:
'importedname' in dir()
'importedname' in globals()
'importedname' in globals(sys.modules['somemodule'])
यह केवल आपको बताता है कि नाम मौजूद है (बाध्य किया गया है), न कि यदि यह उस मॉड्यूल से किसी विशिष्ट मॉड्यूल या ऑब्जेक्ट को संदर्भित करता है। आप उस वस्तु या परीक्षण को आगे बढ़ा सकते हैं यदि यह वही वस्तु है जो इसमें उपलब्ध है sys.modules, यदि आपको यह बताने की आवश्यकता है कि नाम तब से पूरी तरह से किसी और चीज़ पर सेट किया गया है।
raise SystemError()मॉड्यूल को आप आयात नहीं करना चाहते, उसके शीर्ष पर बस (या अपनी पसंद का अन्य अपवाद) रखें। यदि आप करते हैं वास्तव में यह कहीं आयात करते हैं, अपने कार्यक्रम ट्रैसबैक और बाहर निकलने फेंक देते हैं।