१. पाइथनमा आयात कथनहरू र सापेक्ष पथ आयातहरूको अवलोकन
पाइथनमा कार्यक्रमहरू लेख्दा, तपाईंले मोड्युलहरूको कुशलतापूर्वक पुन: प्रयोग गर्न import कथनहरू प्रयोग गर्नुहुन्छ। यो import कथनमा, सापेक्ष पथ आयातहरू मोड्युलहरू बीच लचिलो निर्भरताहरू हुँदा विशेष रूपमा उपयोगी हुन्छन्। यो लेखले पाइथनको import कथनहरूमा सापेक्ष पथहरू प्रयोग गर्ने तरिका र तिनीहरूको फाइदाहरू व्याख्या गर्दछ।
सापेक्ष पथ आयात के हो?
सापेक्ष पथ आयात भनेको वर्तमान मोड्युलको स्थानमा आधारित अन्य मोड्युलहरू आयात गर्ने तरिका हो। यो विशेष रूपमा धेरै मोड्युलहरू भएका ठूला परियोजनाहरू वा प्याकेज विकासका लागि उपयोगी हुन्छ। सापेक्ष पथ आयातहरू प्रयोग गर्दा मोड्युलहरू बीच निर्भरताहरू स्पष्ट हुन्छन्, जसले परियोजनाको मर्मतलाई सजिलो बनाउँछ।
उदाहरणका लागि, निम्नानुसारको निर्देशिका संरचना भएको कल्पना गर्नुहोस्।
project/
├── main.py
├── package/
│ ├── module_a.py
│ └── sub_package/
│ └── module_b.py
सापेक्ष पथ प्रयोग गरेर module_b.py बाट module_a.py आयात गर्न, तपाईंले यसरी लेख्नुहुनेछ:
from ..module_a import some_function
यसरी, सापेक्ष पथहरू प्रयोग गर्दा निर्देशिका पदानुक्रममा आधारित मोड्युलहरू लचकतापूर्वक आयात गर्न सकिन्छ।

२. सापेक्ष र निरपेक्ष पथहरू बीचको भिन्नता
पाइथनमा import कथनहरूका दुई प्रकार छन्: सापेक्ष पथहरू र निरपेक्ष पथहरू। तिनीहरू बीचको भिन्नता लक्षित मोड्युल कसरी निर्दिष्ट गरिन्छ भन्नेमा आधारित छ।
निरपेक्ष पथ आयात
निरपेक्ष पथ आयातले परियोजनाको जड निर्देशिकाबाट मोड्युल निर्दिष्ट गर्दछ।
उदाहरणका लागि, निम्न संरचना भएको परियोजनामा, यदि तपाईंले main.py मा module_a.py लाई निरपेक्ष पथ प्रयोग गरेर आयात गर्न चाहनुहुन्छ भने, तपाईंले यसरी लेख्नुहुनेछ:
from package.module_a import some_function
यो विधि परियोजनाको समग्र संरचना स्पष्ट हुँदा र मोड्युलहरूको स्थान स्थिर रहँदा उपयोगी हुन्छ।
सापेक्ष पथ आयात
अर्कोतर्फ, सापेक्ष पथ आयातहरूले वर्तमान मोड्युलको स्थानमा आधारित मोड्युलहरू आयात गर्दछन्। सापेक्ष पथ आयातहरू विशेष रूपमा परियोजनाको संरचना परिवर्तन हुँदा तुलनात्मक रूपमा लचिलो हुन सक्छन्। यसले मोड्युलहरू बीच निर्भरताहरू कायम राख्दै कोडको पुन: प्रयोगयोग्यता सुधार्न सम्भव बनाउँछ।
उदाहरणका लागि, निम्न कोडले वर्तमान मोड्युलभन्दा एक निर्देशिका माथि अवस्थित मोड्युल आयात गर्ने तरिका देखाउँछ:
from ..module_a import some_function
कुन विकल्प छान्ने भन्ने कुरा परियोजनाको आकार र जटिलतामा निर्भर गर्दछ। सामान्यतया, मोड्युलहरूको स्थान स्थिर हुँदा निरपेक्ष पथ आयातहरू उपयुक्त हुन्छन्, जबकि परिवर्तनहरू बारम्बार हुँदा सापेक्ष पथ आयातहरू बढी उपयुक्त हुन्छन्।
३. सापेक्ष पथहरू प्रयोग गरेर आयात गर्ने
समान निर्देशिकाबाट मोड्युलहरू आयात गर्ने
जब आयात गर्ने मोड्युल समान निर्देशिकामा अवस्थित हुन्छ, तपाईंलाई कुनै जटिल निर्दिष्टिकरण आवश्यक पर्दैन—मोड्युलको नाम सीधै प्रयोग गर्नुहोस्। उदाहरणका लागि, यदि module_a.py र module_b.py समान निर्देशिकामा छन् भने, तपाईंले तिनीहरूलाई यसरी आयात गर्न सक्नुहुन्छ।
import module_a
विशिष्ट फङ्क्शन वा कक्षा आयात गर्न, तपाईंले यसरी गर्नुहुनेछ:
from module_a import some_function
अभिभावक निर्देशिकाबाट आयात गर्ने
जब अभिभावक निर्देशिकामा अवस्थित मोड्युल आयात गर्दा, स्तर माथि जान .. प्रयोग गर्नुहोस् र त्यसपछि मोड्युल निर्दिष्ट गर्नुहोस्। उदाहरणका लागि, एक स्तर माथिबाट आयात गर्न, तपाईंले यसरी लेख्नुहुनेछ:
from ..module_a import some_function
उपनिर्देशिकाबाट आयात गर्ने
जब उपनिर्देशिकाबाट मोड्युल आयात गर्दा, निर्देशिका नाम र मोड्युल नामलाई बिन्दुले अलग गरेर निर्दिष्ट गर्नुहोस्। उदाहरणका लागि, तपाईंले उपनिर्देशिकाबाट मोड्युल यसरी आयात गर्न सक्नुहुन्छ।
from sub_package.module_b import some_function
सापेक्ष पथहरू प्रयोग गर्दा परियोजनाको निर्देशिका संरचना परिवर्तन भए पनि तपाईंको कोड लचिलो रहन्छ भन्ने प्रमुख फाइदा प्रदान गर्दछ।
४. प्याकेज भित्रका मोड्युलहरू आयात गर्ने
पाइथनमा मोड्युलहरू व्यवस्थित गर्नका लागि “प्याकेज” को अवधारणा छ। प्याकेजहरू विशेष रूपमा ठूला परियोजनाहरूमा धेरै मोड्युलहरूलाई समूहबद्ध गर्नका लागि उपयोगी हुन्छन्। तपाईंले प्याकेज भित्रका मोड्युलहरू पनि सापेक्ष पथहरू प्रयोग गरेर आयात गर्न सक्नुहुन्छ।
प्याकेज संरचना र __init__.py फाइल
प्याकेज सिर्जना गर्दा, तपाईंले यसको निर्देशिकामा __init__.py फाइल थप्नु पर्छ। यो फाइलले पाइथनलाई निर्देशिकालाई प्याकेजको रूपमा चिन्न भन्छ। तल, हामी निम्न संरचनासँगको परियोजनालाई प्रयोग गरेर व्याख्या गर्नेछौं।
project/
├── main.py
├── package/
│ ├── __init__.py
│ ├── module_a.py
│ └── sub_package/
│ ├── __init__.py
│ └── module_b.py
प्याकेज भित्रका मोड्युलहरूको सापेक्ष पथ आयात
उदाहरणका लागि, module_b.py बाट module_a.py लाई सापेक्ष पथ प्रयोग गरेर आयात गर्न, तपाईंले यसरी लेख्नुहुनेछ:
from ..module_a import some_function
यो .. ले हालको निर्देशिकाबाट एक तह माथि जानु भन्ने अर्थ राख्छ। यस तरिकाले, तपाईं प्याकेज भित्रका मोड्युलहरूबीच फङ्क्सनहरू र कक्षाहरू साझा गर्न सक्नुहुन्छ।
यसैगरी, सापेक्ष पथ प्रयोग गरेर सोही प्याकेजबाट मोड्युल आयात गर्दा, तपाईं डट प्रयोग गरेर सजिलै निर्दिष्ट गर्न सक्नुहुन्छ।
from .module_a import some_function
यसले परियोजनाका मोड्युलहरूलाई संक्षिप्त रूपमा अन्तर्क्रिया गर्न अनुमति दिन्छ, र निर्देशिका संरचना परिवर्तन भए पनि ठूलो कोड परिवर्तन आवश्यक पर्दैन।
५. सामान्य त्रुटिहरू र तिनका समाधानहरू
पाइथनका सापेक्ष पथ आयातहरूले धेरै सामान्य त्रुटिहरू उत्पन्न गर्न सक्छन्। यो खण्डमा यी त्रुटिहरू र तिनलाई समाधान गर्ने तरिकाहरू व्याख्या गरिएको छ।
ImportError: attempted relative import with no known parent package
यो त्रुटि सापेक्ष पथ प्रयोग गरेर मोड्युल आयात गर्दा उत्पन्न हुने सामान्य त्रुटि हो, विशेष गरी स्क्रिप्टलाई प्रत्यक्ष रूपमा चलाउँदा। उदाहरणका लागि, निम्न कोडले यो समस्या उत्पन्न गर्न सक्छ।
from ..module_a import some_function
यो त्रुटि पाइथनले स्क्रिप्टको अभिभावक प्याकेजलाई चिन्न नसक्नुले हुन्छ। पाइथनमा, एउटा मोड्युललाई प्याकेजको भागको रूपमा स्पष्ट रूपमा चिन्नुपर्छ। स्क्रिप्टलाई प्रत्यक्ष रूपमा चलाउँदा, सापेक्ष पथ प्रयोग गर्दा त्रुटि हुने सम्भावना हुन्छ।
समाधान
यो समस्याबाट बच्नका लागि एउटा तरिका sys.path प्रयोग गरेर मोड्युल खोज पथलाई स्पष्ट रूपमा सेट गर्नु हो। उदाहरणका लागि, तपाईं sys.path.append() प्रयोग गरेर अभिभावक निर्देशिकालाई खोज पथमा थप्न सक्नुहुन्छ।
import sys
sys.path.append('..')
from module_a import some_function
यसले पाइथनलाई मोड्युललाई सही रूपमा अवस्थित गर्न अनुमति दिन्छ।
ModuleNotFoundError
अर्को सामान्य त्रुटि ModuleNotFoundError हो। यो तब हुन्छ जब निर्दिष्ट मोड्युल फेला पार्न सकिँदैन। सापेक्ष पथमार्फत मोड्युल आयात गर्दा, यो मोड्युलको स्थान गलत हुनु वा sys.path सही रूपमा सेट नभएको हुन सक्छ।
समाधान
यो समस्यालाई समाधान गर्न, आयात वक्तव्यहरूलाई पुनरावलोकन गर्नुहोस् र मोड्युल वास्तवमा अवस्थित छ भनेर जाँच गर्नुहोस्। यसैगरी, sys.path.append() प्रयोग गरेर पाइथनले मोड्युल फेला पार्न सक्ने निर्देशिकाहरूलाई स्पष्ट रूपमा निर्दिष्ट गरेर, तपाईं त्रुटिबाट बच्न सक्नुहुन्छ।

६. व्यावहारिक उदाहरणहरू र अनुप्रयोगहरू
यहाँ हामी सापेक्ष पथ आयातहरू प्रयोग गरेका ठोस कोड उदाहरणहरू प्रस्तुत गर्दछौं। यसले वास्तविक परियोजनाहरूमा सापेक्ष पथहरू कसरी उपयोग गर्न सकिन्छ भन्ने देखाउँछ।
उदाहरण: अभिभावक निर्देशिकाबाट आयात
निम्न संरचनासँगको परियोजना मान्नुहोस्।
project/
├── main.py
├── package/
│ ├── module_a.py
│ └── sub_package/
│ └── module_b.py
module_a.py बाट some_function फङ्क्सनलाई आयात गर्ने module_b.py को कोड तल देखाइएको छ।
# module_b.py
from ..module_a import some_function
def use_function():
some_function()
यो कोडमा, .. लाई एक निर्देशिका माथि जान प्रयोग गरिएको छ, र module_a बाट फङ्क्सन आयात गरिएको छ। यो दृष्टिकोण बहु निर्देशिकाहरूमा फैलिएका मोड्युलहरूबीच फङ्क्सनहरू वा कक्षाहरू साझा गर्दा उपयोगी हुन्छ।
उदाहरण: sys.path प्रयोग गरेर मोड्युलहरू आयात
अर्को, हामी sys.path.append() प्रयोग गरेर अभिभावक-निर्देशिका मोड्युल आयात गर्ने उदाहरण देखाउँछौं।
# module_b.py
import sys
sys.path.append('..')
from module_a import some_function
def use_function():
some_function()
यो विधिमा, sys.path ले अभिभावक निर्देशिकालाई थप्छ, जसले पाइथनलाई module_a लाई सही रूपमा अवस्थित गर्न अनुमति दिन्छ। यो दृष्टिकोण स्क्रिप्टहरूलाई प्रत्यक्ष रूपमा चलाउँदा विशेष रूपमा प्रभावकारी हुन्छ।
७. निष्कर्ष
यस लेखमा, हामीले Python को import कथनहरूमा relative‑path imports को विस्तृत जाँच प्रस्तुत गरेका थियौं। Relative‑path imports विशेष गरी ठूला परियोजनाहरू र प्याकेज विकासको लागि उपयोगी हुन्छन् किनभने तिनीहरूले मोड्युलहरू बीचको निर्भरताहरूलाई लचिलो रूपमा व्यवस्थापन गर्न अनुमति दिन्छ। तथापि, तिनीहरू त्रुटिप्रवण हुन सक्छन्, त्यसैले उचित कन्फिगरेसन र sys.path को प्रयोग महत्त्वपूर्ण हुन्छ।
Relative‑path imports को फाइदाहरूलाई बुझेर र वास्तविक परियोजनाहरूमा लागू गर्दा अधिक प्रभावकारी कोड व्यवस्थापन सम्भव हुन्छ।



