Last chance! 50% off DataCamp Premium
Sale ends in
जब आप पहली बार Python सीखना शुरू करते हैं, तो आप सब कुछ एक ही फाइल में लिखते हैं। छोटे स्क्रिप्ट्स के लिए यह ठीक चलता है, लेकिन जैसे-जैसे आपके प्रोग्राम बड़े होते हैं, एकल फाइल पढ़ना कठिन, बनाए रखना मुश्किल, और अलग-अलग प्रोजेक्ट्स में पुन: उपयोग करना असंभव हो जाता है। Python इसका समाधान मॉड्यूल्स के रूप में देता है।
इस ट्यूटोरियल में, आप सीखेंगे कि मॉड्यूल्स क्या होते हैं, उन्हें कैसे इम्पोर्ट करें, अपने खुद के मॉड्यूल कैसे लिखें, और वे सर्वोत्तम प्रक्रियाएँ जो शुरुआती स्क्रिप्ट्स को प्रोडक्शन-रेडी कोड से अलग करती हैं। और अपने खुद के मॉड्यूल लिखना शुरू करने से पहले, मैं सुझाव दूँगा कि आप हमारा Intro to Python for Data Science कोर्स देखें।
मॉड्यूल बस एक Python फाइल है। कोई भी फाइल जिसमें .py एक्सटेंशन हो और उसमें Python कोड — फंक्शंस, क्लासेस, वेरिएबल्स, या रन होने वाली लॉजिक — मौजूद हो, वह एक मॉड्यूल है। जब आप calculation.py नाम की फाइल सेव करते हैं, तो आपने calculation नाम का मॉड्यूल बना लिया।
मॉड्यूल्स की ताकत उन्हें दूसरे प्रोग्राम्स में इम्पोर्ट कर पाने से आती है। एक ही फंक्शन को कई स्क्रिप्ट्स में कॉपी-पेस्ट करने के बजाय, आप उसे एक बार मॉड्यूल में परिभाषित करते हैं और जरूरत पड़ने पर इम्पोर्ट कर लेते हैं। यही Python की स्टैंडर्ड लाइब्रेरी में होता है, जो प्री-बिल्ट मॉड्यूल्स के संग्रह हैं जैसे math, os, और random, जिन्हें आप एक ही लाइन से किसी भी प्रोग्राम में जोड़ सकते हैं।
विशेष रूप से, Python में आपको तीन तरह के मॉड्यूल्स मिलेंगे:
बिल्ट-इन मॉड्यूल्स: जो स्वयं Python के साथ आते हैं, जैसे math और os, जिनका मैंने अभी जिक्र किया।
थर्ड-पार्टी मॉड्यूल्स: pip से इंस्टॉल होने वाले, जैसे numpy या pandas।
आपके अपने मॉड्यूल्स: आपके द्वारा लिखी गई कोई भी .py फाइल।
किसी भी मॉड्यूल में मौजूद फ़ंक्शनैलिटी का उपयोग करने के लिए, आपको उसे अपने मौजूदा प्रोग्राम में इम्पोर्ट करना होता है। इसके लिए आपको वांछित मॉड्यूल नाम के साथ import कीवर्ड का उपयोग करना होगा। जब इंटरप्रेटर को import स्टेटमेंट मिलता है, तो वह मॉड्यूल को आपके मौजूदा प्रोग्राम में इम्पोर्ट कर देता है।
आप मॉड्यूल के अंदर मौजूद फंक्शंस का उपयोग मॉड्यूल नाम के साथ डॉट (.) ऑपरेटर लगा कर कर सकते हैं।
पहले देखते हैं कि स्टैंडर्ड लाइब्रेरी मॉड्यूल्स का उपयोग कैसे करें। नीचे दिए उदाहरण में, प्रोग्राम में math मॉड्यूल इम्पोर्ट किया गया है ताकि आप sqrt() फंक्शन का उपयोग कर सकें।
import math # Import the math module
num = 4
print(math.sqrt(num)) # Call the sqrt() function from the math module
कार्यक्षमता के कारण, हर मॉड्यूल एक इंटरप्रेटर सेशन में केवल एक बार ही इम्पोर्ट किया जाता है। इसलिए, यदि आप अपने मॉड्यूल्स बदलते हैं, तो आपको इंटरप्रेटर को रीस्टार्ट करना होगा।
यदि आप किसी पहले से इम्पोर्ट किए गए मॉड्यूल को दोबारा लोड करना चाहते हैं (जैसे उसे एडिट करने के बाद), तो importlib.reload() का उपयोग करें।
ध्यान दें कि पुराना बिल्ट-इन reload() अब Python 3 में मौजूद नहीं है — Python 3.4+ में मॉड्यूल्स रीलोड करने का वर्तमान और आधिकारिक तरीका importlib.reload() ही है।
import importlib
importlib.reload(module_name)
नोट: sys, __main__, builtins और अन्य प्रमुख मॉड्यूल्स को रीलोड करना अनुशंसित नहीं है। कई एक्सटेंशन मॉड्यूल्स एक से अधिक बार इनिशियलाइज़ होने के लिए बने नहीं होते और रीलोड करने पर अप्रत्याशित तरीकों से फेल हो सकते हैं। विकास के दौरान केवल अपने ही मॉड्यूल्स को रीलोड करने तक सीमित रहें।
जल्द आ रहा है: Python में "lazy imports" आ रहे हैं। ये मॉड्यूल्स को तब तक लोड करने में विलंब करके स्टार्टअप समय तेज करेंगे जब तक कि उनका पहली बार उपयोग न हो। यह खासकर बड़े प्रोजेक्ट्स में उपयोगी है, जहाँ कई मॉड्यूल्स फाइल के शीर्ष पर इम्पोर्ट किए जाते हैं, पर तुरंत ज़रूरी नहीं होते।
अब जब आपने सीख लिया है कि अपने प्रोग्राम में मॉड्यूल कैसे इम्पोर्ट करना है, तो समय है कि अपना खुद का मॉड्यूल लिखें और उसे किसी दूसरे प्रोग्राम में उपयोग करें। मॉड्यूल लिखना किसी भी सामान्य Python फाइल लिखने जैसा ही है। चलिए calculation.py फाइल में दो संख्याएँ जोड़ने/घटाने का फंक्शन लिखकर शुरू करते हैं।
def add(x,y):
return (x+y)
def sub(x,y):
return (x-y)
यदि आप इस स्क्रिप्ट को कमांड लाइन से चलाने की कोशिश करेंगे, तो कुछ नहीं होगा क्योंकि आपने प्रोग्राम को कुछ करने के लिए निर्देश नहीं दिया है। उसी डायरेक्टरी में module_test.py नाम की एक और Python स्क्रिप्ट बनाएँ और इसमें नीचे दिया कोड लिखें।
import calculation #Importing calculation module
print(calculation.add(1,2)) #Calling function defined in the calculation module
यदि आप module_test.py चलाएँगे, तो आउटपुट में "3" दिखेगा। जब इंटरप्रेटर को import स्टेटमेंट मिला, तो उसने आपके कोड में calculation मॉड्यूल इम्पोर्ट कर लिया और फिर डॉट ऑपरेटर का उपयोग करके, आप add() फंक्शन तक पहुँच सके।
मॉड्यूल लिखते समय एक महत्वपूर्ण आदत यह है कि ऐसा कोई भी कोड जिसे आप केवल सीधे चलाते समय (ना कि इम्पोर्ट होने पर) चलाना चाहते हैं, उसे if __name__ == "__main__" गार्ड में लपेटें।
# calculation.py
def add(x, y):
return x + y
def sub(x, y):
return x - y
if __name__ == "__main__":
# This only runs when you execute calculation.py directly
# It will NOT run when another script imports this module
print(add(1, 2))
__name__ को "__main__" सेट करता है। जब उसे किसी दूसरे स्क्रिप्ट द्वारा इम्पोर्ट किया जाता है, तो __name__ मॉड्यूल की फाइल के नाम पर सेट होता है। इसका अर्थ है कि ऊपर दिया गया print स्टेटमेंट किसी के अपने प्रोग्राम में calculation इम्पोर्ट करने पर अप्रत्याशित रूप से ट्रिगर नहीं होगा।मॉड्यूल्स इम्पोर्ट करने के और भी तरीके हैं:
from .. import स्टेटमेंट
from .. import * स्टेटमेंट
इम्पोर्ट किए गए मॉड्यूल का नाम बदलना
from..import स्टेटमेंट आपको पूरे मॉड्यूल को इम्पोर्ट करने की बजाय किसी मॉड्यूल से चुनिंदा फंक्शंस/वेरिएबल्स इम्पोर्ट करने देता है। पिछले उदाहरण में, जब आपने calculation को module_test.py में इम्पोर्ट किया, तो add() और sub() दोनों फंक्शंस इम्पोर्ट हो गए। लेकिन अगर आपको अपने कोड में सिर्फ add() फंक्शन चाहिए? यहाँ from..import के उपयोग को दर्शाने वाला उदाहरण है।
from calculation import add
print(add(1,2))
ऊपर दिए उदाहरण में, केवल add() फंक्शन इम्पोर्ट और उपयोग किया गया है। ध्यान दें add() के उपयोग पर? अब आप इसे मॉड्यूल नाम के बिना सीधे एक्सेस कर सकते हैं। आप एक से अधिक एट्रीब्यूट्स भी इम्पोर्ट कर सकते हैं, इम्पोर्ट स्टेटमेंट में उन्हें कॉमा से अलग कर दें। निम्न उदाहरण देखें:
from calculation import add,sub
आप इस स्टेटमेंट से किसी मॉड्यूल के सभी एट्रीब्यूट्स इम्पोर्ट कर सकते हैं। इससे इम्पोर्ट किए गए मॉड्यूल के सभी एट्रीब्यूट्स आपके कोड में विज़िबल हो जाते हैं।
यहाँ from .. import * के उपयोग को दर्शाने वाला उदाहरण है:
from calculation import *
print(add(1,2))
print(sub(3,2))
ध्यान दें कि पेशेवर दुनिया में, आपको from..import और from..import* का उपयोग करने से बचना चाहिए। यह आपके नेमस्पेस को उस मॉड्यूल की हर नेम से भर देता है, कोड पढ़ते समय यह बताना असंभव कर देता है कि कोई फंक्शन कहाँ से आया, और चुपचाप पहले से परिभाषित नेम्स को ओवरराइट कर सकता है। इसके बजाय स्पष्ट इम्पोर्ट्स का उपयोग करें।
आप जिस मॉड्यूल को इम्पोर्ट कर रहे हैं, उसका नाम बदल सकते हैं, जो तब उपयोगी होता है जब आप मॉड्यूल को अधिक अर्थपूर्ण नाम देना चाहते हैं या मॉड्यूल का नाम बार-बार उपयोग करने के लिए बहुत लंबा है। आप इसे बदलने के लिए as कीवर्ड का उपयोग कर सकते हैं। नीचे दिया उदाहरण दिखाता है कि इसे अपने प्रोग्राम में कैसे उपयोग करें।
import calculation as cal
print(cal.add(1,2))
आपने calculation का नाम बदलकर cal करके कुछ टाइपिंग समय बचा लिया।
ध्यान दें कि अब आप calculation.add(1,2) का उपयोग नहीं कर सकते, क्योंकि आपके प्रोग्राम में calculation अब पहचाना नहीं जाएगा। क्या हो रहा है: एक बार जब आप किसी मॉड्यूल को as के साथ उपनाम दे देते हैं, तो उस स्क्रिप्ट में मूल नाम उपलब्ध नहीं रहता।
हो सकता है कि आपको अपने मॉड्यूल्स को अलग-अलग प्रोग्राम्स या प्रोजेक्ट्स में उपयोग करना पड़े और डायरेक्टरी में उनका वास्तविक स्थान अलग हो। यदि आप किसी दूसरे डायरेक्टरी में रखे मॉड्यूल का उपयोग करना चाहते हैं, तो Python इसके लिए कुछ विकल्प देता है।
जब आप calculation नाम का मॉड्यूल इम्पोर्ट करते हैं, तो इंटरप्रेटर पहले उसी नाम के किसी बिल्ट-इन मॉड्यूल को खोजता है। यदि नहीं मिलता, तो वह sys.path वेरिएबल द्वारा दी गई डायरेक्टरीज़ की सूची में calculation.py नाम की फाइल खोजता है। sys.path में ये लोकेशंस शामिल होती हैं:
इनपुट स्क्रिप्ट वाली डायरेक्टरी (या करंट डायरेक्टरी)
PYTHONPATH (शेल वेरिएबल PATH जैसी सिंटैक्स वाली डायरेक्टरी नेम्स की सूची)
इंस्टॉलेशन-निर्भर डिफॉल्ट
मान लें module_test.py /home/datacamp/ डायरेक्टरी में है, और आपने calculation.py को /home/test/ में स्थानांतरित कर दिया। आप sys.path को संशोधित करके /home/test/ को उन पाथ्स की सूची में जोड़ सकते हैं, जिनमें Python इंटरप्रेटर मॉड्यूल को खोजेगा। इसके लिए आपको module_test.py को इस प्रकार बदलना होगा:
import sys
sys.path.append('/home/test/')
import calculation
print(calculation.add(1,2))
किसी मॉड्यूल को इम्पोर्ट करने से प्रोग्राम्स का एक्ज़ीक्यूशन समय बढ़ सकता है, इसलिए Python के पास इसे तेज करने के कुछ तरीके हैं। उनमें से एक है .pyc एक्सटेंशन वाली बाइट-कम्पाइल्ड फाइल्स बनाना।
आंतरिक रूप से, Python सोर्स कोड को एक मध्यवर्ती रूप, बाइटकोड, में बदलता है। फिर इसे आपके कंप्यूटर की नेटिव भाषा में अनुवाद कर चलाता है। यह .pyc फाइल तब उपयोगी होती है जब आप किसी अलग प्रोग्राम से अगली बार उस मॉड्यूल को इम्पोर्ट करते हैं — यह काफी तेज होगा क्योंकि मॉड्यूल इम्पोर्ट करने के लिए आवश्यक प्रोसेसिंग का एक हिस्सा पहले ही हो चुका होता है। साथ ही, ये बाइट-कम्पाइल्ड फाइल्स प्लेटफॉर्म-स्वतंत्र होती हैं।
ध्यान दें कि ये .pyc फाइल्स आमतौर पर संबंधित .py फाइल्स वाली ही डायरेक्टरी में बनती हैं। यदि Python को उस डायरेक्टरी में लिखने की अनुमति नहीं है, तो .pyc फाइल्स नहीं बनेंगी। ये फाइल्स आमतौर पर आपकी __pycache__ डायरेक्टरी में आपकी .py फाइल्स के साथ रखी जाती हैं, जैसे नाम के साथ calculation.cpython-312.pyc जो प्रयुक्त Python संस्करण को दर्शाते हैं। आप इस फ़ोल्डर को नज़रअंदाज़ कर सकते हैं या .gitignore में जोड़ सकते हैं। Python इसे स्वतः प्रबंधित करता है।
dir() फंक्शन का उपयोग किसी मॉड्यूल में परिभाषित सभी नेम्स जानने के लिए किया जाता है। यह उस मॉड्यूल में परिभाषित नेम्स वाली स्ट्रिंग्स की सॉर्टेड सूची लौटाता है।
import calculation
print(calculation.add(1,2))
print(dir(calculation))
['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'add', 'sub']
आउटपुट में, आप मॉड्यूल में परिभाषित फंक्शंस के नेम्स देख सकते हैं, add और sub। एट्रीब्यूट __name__ में मॉड्यूल का नाम होता है। अंडरस्कोर से शुरू होने वाले सभी एट्रीब्यूट्स Python के डिफॉल्ट एट्रीब्यूट्स होते हैं जो किसी मॉड्यूल से जुड़े रहते हैं।
कोड के बेहतर प्रबंधन और पुन: उपयोग के लिए मॉड्यूल बनाना आवश्यक है। Python आपको कुछ बिल्ट-इन मॉड्यूल्स देता है, जिन्हें आप import कीवर्ड से इम्पोर्ट कर सकते हैं। Python आपको अपने खुद के मॉड्यूल बनाने और उन्हें अपने प्रोग्राम्स में उपयोग करने की सुविधा भी देता है। यह मॉड्यूल्स के उपयोग की लागत को कम करने के लिए बाइट-कम्पाइल्ड फाइल्स उपलब्ध कराता है, जिससे एक्ज़ीक्यूशन तेज होता है। आप किसी प्रोग्राम में उपयोग किए जा रहे मॉड्यूल में परिभाषित एट्रीब्यूट्स जानने के लिए dir() का उपयोग कर सकते हैं। यह प्री-डिफाइंड मॉड्यूल्स और यूज़र-डिफाइंड मॉड्यूल्स, दोनों पर लागू होता है।
यदि आप Python के बारे में और सीखना चाहते हैं, तो हमारा Intermediate Python for Data Science कोर्स देख सकते हैं।
हाँ। आप फंक्शंस के अंदर मॉड्यूल्स इम्पोर्ट कर सकते हैं, लेकिन स्पष्टता और प्रदर्शन के लिए आमतौर पर फाइल के शीर्ष पर इम्पोर्ट करना बेहतर होता है।
Python मॉड्यूल सर्च पाथ (sys.path) में जो पहला मिलान मिलता है, उसे इम्पोर्ट कर लेता है। टकराव से बचने के लिए नेमिंग में सावधानी रखें।
नहीं। जब आप किसी मॉड्यूल को इम्पोर्ट करते हैं, तो Python स्वतः ही .pyc फाइल्स बना देता है—यदि लिखने की अनुमति उपलब्ध हो।
मॉड्यूल के __file__ एट्रीब्यूट का उपयोग करें:
import math
print(math.__file__)
यह काम तो करता है, लेकिन प्रोडक्शन कोड में अनुशंसित नहीं है। यह नेमस्पेस को प्रदूषित कर देता है और यह ट्रैक करना कठिन बना देता है कि क्या उपयोग हो रहा है।
हाँ, इंटरैक्टिव सेशन में importlib.reload() का उपयोग करें:
import importlib
import mymodule
importlib.reload(mymodule)
इन कोर्सेज़ के साथ Python के बारे में और जानें!
कोर्स
कोर्स
कोर्स