Importing and Reloading Module in Python – Interactive Prompt की सबसे बड़ी समस्या यही है कि चाहे एक Line का Code हो या हजार Lines का, ये हमारे Codes को किसी भी तरह से Save करके नहीं रखता ताकि हम इसे फिर से Reuse कर सकें। इसीलिए हमें हमारे Python Codes को एक Separate File में लिखना होता है और Python में इस File को Module के नाम से जाना जाता है।
Python Modules और कुछ नहीं होते, केवल ऐसे Simple Text File होते हैं जिनमें Python Code Statements को लिखा गया होता है। इस Module को ही Python Script File व Python Program File भी कहा जाता है। एक बार जब हम किसी Python Script File को Create कर लेते हैं, उसके बाद Python Shell द्वारा हम उस File को जितनी बार भी चाहें उतनी बार Run कर सकते हैं।
जब हम किसी Module को किसी अन्य Module में Import करते हैं, तब Import Statement लिखते समय हमें File के पूरे Path को तो Situation के आधार पर Specify करना पड़ सकता है, लेकिन Module के Extension को Specify नहीं किया जाता।
उदाहरण के लिए यदि हम जिस Module को Current Script में Import करना चाहते हैं, वो Current Directory की एक Sub-Directory में Stored है, तो उस File को Import करने के लिए हमें subdirectory\module तो लिखना पडेगा लेकिन अगर Module का नाम module.py है, तो Import करते समय हमें module.py के .py Extension को Ignore करते हुए केवल subdirectory\module ही लिखना होगा।
इतना ही नहीं, Interactive Prompt पर तो जो भी Statement Execute होता है, Interactive Prompt उसका Output स्वयं ही Display कर देता है, लेकिन जब हम Script File बनाते हैं, तब किसी भी Output को Display करने के लिए हमें हमारी Script File में जरूरत के अनुसार print() Statement Use करना जरूरी होता है।
Importing and Reloading Module
जैसाकि हमने पहले भी बताया कि प्रत्येक Python Script जिसका Extension .py हो, एक Module है और एक Module में Define किए गए सभी Codes को कोई भी अन्य Python Script जरूरत के अनुसार Use करने के लिए Import कर सकता है। import Operation द्वारा मूलत: हम Python Interpreter को ये बता रहे होते हैं कि वह Current Script में Import की जाने वाली Script के Codes को ज्यों का त्यों Load करके Access कर सकता है।
Python का ये Module आधारित Service Model ही Python Programming Architecture का Core Concept है। इसलिए किसी बहुत बड़े Python Application में ढ़ेर सारे तरह के Module Files होते हैं जो कि विभिन्न Module Files से विभिन्न प्रकार के Codes को Import करके अपनी Code Reusing करते हुए अपनी विभिन्न प्रकार की जरूरतों को पूरा करते हैं।
किसी बड़े Application में जितने भी Modules होते हैं, उन सभी Group of Modules के Collection में एक मुख्य Module होता है, जिसे Main Module के नाम से जाना जाता है और सामान्यत: इसे C/C++, Java की तरह Main File, Top-Level File या Top-Level Script भी कहा जाता है और सम्पूर्ण Python Application का यही वह सबसे पहला File होता है, जिसे Python Interpreter द्वारा Execute करना शुरू किया जाता है तथा इसी Main File में आगे के Statements द्वारा Application से सम्बंधित अन्य Modules को Import किया जाता है।
किसी भी Script में हम जिस Module को एक बार Import कर लेते हैं, यदि उसी Script को फिर से दोबारा Import करें, तब भी कोई फर्क नहीं पड़ता क्योंकि एक Script File में कोई भी Module केवल एक ही बार Import होता है, फिर चाहे हमने उसी Module को कितनी ही बार Import क्यों न किया हो।
इसीलिए एक Script File A में हम जिस Module X को Import करते हैं, किसी दूसरी Script File B में भी यदि वही Module X Import किया गया हो और फिर इन दोनों Scripts A व B को किसी Main Script File में Import कर लिया जाए, तो उस Main Script File में Module X केवल एक ही बार Load होगा, हर Imported Script के लिए बार-बार नहीं।
import Statement, Performance के लिहाज से बहुत Heavy Operation होता है, इसीलिए By Design ही Import Statement किसी भी Module को केवल एक ही बार Import करता है जहां Python Interpreter सबसे पहले One by One प्रत्येक –
- Import Statement में Specified Module File को Search करता है।
- फिर Import की जाने वाली File की Compiling करके उसका Bytecode File Generate करता है।
- फिर उस Bytecode File को __pycache__ Directory में Store करता है।
- फिर उस Bytecode को Current Script File में Import करता है।
और प्रत्येक import Statement के साथ Python Interpreter को इस पूरी प्रक्रिया को Follow करने में काफी समय लगता है, जिससे Program का Performance प्रभावित होता है। इसीलिए जब किसी एक Imported Script द्वारा किसी अन्य Module को Import कर लिया जाता है, तो उसी Module को किसी अन्य Imported Script में Specified होने पर भी उसे Current Script में दोबारा Import नहीं किया जाता, बल्कि उसे __pycache__ Directory से सीधे ही Access कर लिया जाता है।
फिर भी कभी-कभी ऐसी स्थिति होती है जहां हम किसी Module File को Dynamically Modify या Construct करते हैं और उस स्थिति में हमें उस File को Python के Default Design Architecture को Overwrite करते हुए फिर से दोबाना Import करना होता है। इस जरूरत को पूरा करने के लिए हमें reload() Statement का प्रयोग करना पड़ता है, जो कि Argument के रूप में Specified Module को फिर से उपरोक्तानुसार Specified चारों Steps को Follow करते हुए Import करता है।
ये reload() Function, Python की imp Library में Exist है। इसलिए जब हमें किसी Script में reload() Function को Use करने की आवश्यकता पड़ती है, तो हमें उस Script File में imp Module को भी Import करना पड़ता है। जैसे-
जिसका Output निम्नानुसार होता है, जहां Same Output का दो बार दिखाई देना इसी बात को Indicate कर रहा है कि ImportMe.py File को दो बार Import किया गया है-
जबकि यदि हम reload() Function के स्थान पर निम्नानुसार दो बार import Statement को ही Use करते-
तो उस स्थिति में हमें निम्नानुसार Output प्राप्त होता-
जहां हम देख सकते हैं कि हालांकि हमने ImportMe.py Script File को दो बार Import किया है, लेकिन Output में केवल एक ही Result दिखाई दे रहा है, जो इसी बात का Indication है कि हालांकि हमने दो import Statement लिखे हैं, फिर भी Python Interpreter ने ImportMe.py File को Current Script File में केवल एक ही बार Import किया है।
यहां एक बहुत ही महत्वपूर्ण रूप से याद रखने वाली बात ये है कि reload() Function हमेंशा import Statement द्वारा किसी पहले से Successfully Loaded Module को ही Reload करता है। इसलिए यदि हम निम्नानुसार तरीके से reload() Function को बिना कोई Module Import किए हुए ही Reload करना चाहें-
तो Python Interpreter हमें निम्नानुसार Error Return करता है-
यहां एक और बात याद रखें कि import एक Statement है जबकि reload() एक Function है। इसीलिए reload() के साथ हमेंशा Parenthesis का प्रयोग करना जरूरी होता है जबकि import के साथ Parenthesis का प्रयोग नहीं कर सकते और क्योंकि reload() एक Function है, इसलिए ये उस File का Path भी Return करता है, जिसे इसके द्वारा Reload किया गया है और इस Path को हम निम्नानुसार print() Function द्वारा Display भी कर सकते हैं-
हालांकि जब हम Interactive Prompt का प्रयोग करते हुए इस Function को Use करते हैं, तब हमें print() Function का प्रयोग करते हुए Output को Display नहीं करना होता, लेकिन क्योंकि हम हमारे सभी Python Programs एक Script File के माध्यम से ही बना रहे हैं, इसलिए Function के Output को Display करने के लिए हमें print() Function Use करना जरूरी होता है और जब हम इस reload() Function की Return Value को print() Function द्वारा Display करते हैं, तो हमें निम्नानुसार Output प्राप्त होता है-
जब हमें किसी Module में Defined सभी Codes को Current Script File में Import करना होता है, तब हम केवल import Statement ही लिखते हैं जैसाकि हमने ImportMe.py नाम की पूरी Script File को निम्नानुसार import Statement द्वारा Import किया है-
import ImportMe
लेकिन क्योंकि reload() Function, Python imp Library में Stored है और हमें हमारी Current Script में केवल इस एक Function की ही जरूरत है। इसलिए Current Script File में केवल इस एक Single Function को ही Import करने के लिए हमें निम्न import Statement Use करना पड़ता है-
from imp import reload
जरूरी नहीं है कि हम import Statement का प्रयोग करते हुए Specifically reload() Function को Import करने के बाद ही इसे Use कर सकते हैं, बल्कि Python हमें ये सुविधा भी देता है कि हम सीधे ही imp Library को Import कर लें और फिर इसे निम्नानुसार तरीके से भी Use कर लें-
import व reload() में एक मुख्य अन्तर ये भी है कि reload() Function केवल उसी Module को Reload करता है, जिसका नाम इसमें Argument के रूप में Pass किया गया होता है लेकिन जिस Module को Reload किया जा रहा है, यदि उस Module में कोई और import Statement हो, तो उस import Statement में Specified Modules को reload() Function Import नहीं करता। इसलिए जब हम reload() Function Use करते हैं, तब कई बार हमें Multiple Modules को Reload करना पड़ सकता है।
ये Article इस वेबसाईट पर Selling हेतु उपलब्ध EBook Python in Hindi से लिया गया है। इसलिए यदि ये Article आपके लिए उपयोगी है, तो निश्चित रूप से ये EBook भी आपके लिए काफी उपयोगी साबित होगी।
Python in Hindi | Page: 602 | Format: PDF