जब भी आप वर्तमान स्क्रिप्ट / पैकेज के सापेक्ष पैकेज आयात कर रहे होते हैं तो सापेक्ष आयात होता है।
उदाहरण के लिए निम्नलिखित पेड़ पर विचार करें:
mypkg
├── base.py
└── derived.py
अब, आपकी derived.pyआवश्यकता कुछ से है base.py। पायथन 2 में, आप इसे इस तरह से कर सकते हैं (इन derived.py):
from base import BaseThing
अजगर 3 अब इसका समर्थन नहीं करता है क्योंकि यह स्पष्ट नहीं है कि आप 'रिश्तेदार' या 'निरपेक्ष' चाहते हैं base। दूसरे शब्दों में, अगर baseसिस्टम में एक पायथन पैकेज स्थापित किया गया था, तो आपको गलत नाम मिलेगा।
इसके बजाय आपको स्पष्ट आयात का उपयोग करने की आवश्यकता होती है जो स्पष्ट रूप से एक पथ-समान आधार पर एक मॉड्यूल का स्थान निर्दिष्ट करता है । आपकी derived.pyतरह दिखेगा:
from .base import BaseThing
प्रमुख .कहते हैं ' baseमॉड्यूल निर्देशिका से आयात '; दूसरे शब्दों में, .baseनक्शे ./base.py।
इसी तरह, ..उपसर्ग है जो निर्देशिका पदानुक्रम की तरह ऊपर जाता है ../( ..modमानचित्रण के साथ ../mod.py), और फिर ...जो दो स्तर ऊपर ( ../../mod.py) और इतने पर जाता है।
हालांकि, कृपया ध्यान दें कि ऊपर सूचीबद्ध पथ निर्देशिका के सापेक्ष थे जहां वर्तमान मॉड्यूल ( derived.py) में रहता है, न कि वर्तमान कार्यशील निर्देशिका में।
@BrenBarn ने पहले ही स्टार आयात मामले की व्याख्या कर दी है। पूर्णता के लिए, मुझे वही कहना होगा;)
उदाहरण के लिए, आपको कुछ mathफ़ंक्शन का उपयोग करने की आवश्यकता है लेकिन आप उन्हें केवल एक फ़ंक्शन में उपयोग करते हैं। पायथन 2 में आपको अर्ध-आलसी होने की अनुमति थी:
def sin_degrees(x):
from math import *
return sin(degrees(x))
ध्यान दें कि यह पहले से ही पायथन 2 में एक चेतावनी को ट्रिगर करता है:
a.py:1: SyntaxWarning: import * only allowed at module level
def sin_degrees(x):
आधुनिक पायथन 2 कोड में आपको और पायथन 3 में आपको या तो करना होगा:
def sin_degrees(x):
from math import sin, degrees
return sin(degrees(x))
या:
from math import *
def sin_degrees(x):
return sin(degrees(x))