कई बार जब हम पायथन कोड बनाते हैं तो हम पाते हैं कि हमें किसी अन्य पायथन फ़ाइल या पैकेज से कोड एक्सेस करने की आवश्यकता है। यह तब होता है जब आपको उस अन्य पायथन फ़ाइल या पैकेज को अपने वर्तमान कोड में आयात करने की आवश्यकता होती है। तो इसे प्राप्त करने का सीधा तरीका आपके वर्तमान पायथन प्रोग्राम के शीर्ष पर नीचे दिया गया कथन है।
import package_name or module_name or from pacakge_name import module_name/object_name
जब उपरोक्त कथन को पार्स किया जाता है तो दुभाषिया निम्नलिखित कार्य करता है।
-
दुभाषिया उन सभी मॉड्यूल के कैश में नामों की तलाश करेगा जो पहले ही आयात किए जा चुके हैं। sys.modules में इस कैशे मॉड्यूल का नाम।
-
यदि उपरोक्त चरण में नहीं मिलता है तो दुभाषिया इसे अंतर्निर्मित मॉड्यूल की सूची में खोजेगा। ये मॉड्यूल पायथन मानक पुस्तकालयों का हिस्सा हैं।
-
यदि यह अभी भी ऊपर चरण -2 में नहीं मिला है, तो दुभाषिया sys.path में परिभाषित निर्देशिकाओं की सूची में संकुल या मॉड्यूल नामों की खोज करेगा, जिसमें खोज की जाने वाली पहली निर्देशिका के रूप में वर्तमान निर्देशिका है।
-
उपरोक्त चरणों में से किसी एक में उन्हें एक आयातित मॉड्यूल के रूप में खोजने पर, पैकेज या मॉड्यूल का नाम वर्तमान कार्यक्रम के स्थानीय दायरे के लिए बाध्य है।
-
यदि पैकेज या मॉड्यूल कभी नहीं मिलता है, तो मॉड्यूल नॉटफाउंड एरर उठाया जाता है।
आयात करने के बारे में कुछ नियम।
उन बयानों का उपयोग करते हुए फाइलों के शीर्ष पर आयात विवरणों का उल्लेख किया जाना चाहिए। जिस क्रम में आयात का उल्लेख किया जाना है वह नीचे दिया गया है।
-
पायथन के मानक पुस्तकालय मॉड्यूल
-
तृतीय-पक्ष मॉड्यूल से आयात करें
-
स्थानीय अनुप्रयोगों से आयात करें
पूर्ण आयात
इस प्रकार के आयात में, हम आयात किए जाने वाले पैकेज/मॉड्यूल/फ़ंक्शन का पूरा पथ निर्दिष्ट करते हैं। निर्देशिका संरचना के लिए स्लैश (/) की गति में एक बिंदु (।) का उपयोग किया जाता है।
पैकेज के लिए निम्नलिखित निर्देशिका संरचना पर विचार करें।
python_project_name/packageA/moduleA1.py python_project_name/packageA/moduleA2.py
साथ ही, मान लें कि मॉड्यूलए2 में फ़ंक्शन नाम myfunc है। जब हम उस फ़ंक्शन को अपने वर्तमान पायथन प्रोग्राम में आयात करना चाहते हैं, तो निरपेक्ष पथ का उपयोग करके हम निम्नलिखित आयात विवरण का उल्लेख करते हैं।
from packageA.moduleA2 import myfunc
निरपेक्ष आयात का बड़ा लाभ यह है कि यह स्पष्ट रूप से इंगित करता है कि आयात कहाँ हो रहा है, दूसरी ओर कभी-कभी यह काफी लंबा हो सकता है।
सापेक्ष आयात
सापेक्ष आयात में, हम आयातित मॉड्यूल का उपयोग करने वाली वर्तमान स्क्रिप्ट के स्थान के सापेक्ष आयातित पैकेज के पथ का उल्लेख करते हैं।
एक बिंदु वर्तमान स्थान से एक निर्देशिका को इंगित करता है और दो बिंदु दो निर्देशिकाओं को ऊपर और इसी तरह इंगित करता है।
पैकेज के लिए निम्नलिखित निर्देशिका संरचना पर विचार करें।
python_project_name/packageA/moduleA1.py python_project_name/packageB/moduleB1.py
आइए मान लें कि उपरोक्त पैकेज संरचना में मॉड्यूल बी 1 को मॉड्यूल ए 1 आयात करने की आवश्यकता है। फिर आयात विवरण है:
from ..packageA import moduleA1
दो बिंदु इंगित करते हैं कि मॉड्यूल बी 1 के स्थान से, हमें निर्देशिका पायथन_प्रोजेक्ट_नाम में जाना होगा और फिर मॉड्यूल ए 1 प्राप्त करने के लिए पैकेज ए पर जाना होगा।
इस तरह के आयात कम होते हैं और शीर्ष स्तर की परियोजना को आसानी से आयात विवरण में पथ बदले बिना एक स्थान से दूसरे स्थान पर ले जाया जा सकता है। नकारात्मक पक्ष पर, यदि आयात फ़ोल्डर साझा किए जाते हैं तो पथ में कुछ संशोधन होने पर कोड आसानी से प्रभावित हो जाता है।