पायथन रिश्तेदार आयात अब दृढ़ता से हतोत्साहित नहीं होते हैं, लेकिन निरपेक्षता का उपयोग करते हुए उस मामले में दृढ़ता से सुझाव दिया जाता है।
कृपया इस चर्चा को स्वयं Guido का हवाला देते हुए देखें :
"क्या यह ज्यादातर ऐतिहासिक नहीं है? जब तक कि नए रिश्तेदार-आयात सिंटैक्स को लागू नहीं किया गया था, रिश्तेदार आयातों के साथ विभिन्न समस्याएं थीं। अल्पकालिक समाधान का उपयोग करने की अनुशंसा नहीं करना था। दीर्घकालिक समाधान एक अस्पष्ट सिंटैक्स को लागू करना था। अब यह एंटी-सिफारिश को वापस लेने का समय है। बेशक, ओवरबोर्ड के बिना - मैं अभी भी उन्हें एक अधिग्रहीत स्वाद पाता हूं, लेकिन उनके पास कोई स्थान नहीं है। "
ओपी पीईपी 328 को सही ढंग से जोड़ता है जो कहता है:
कई उपयोग मामले प्रस्तुत किए गए, जिनमें से सबसे महत्वपूर्ण उप-पैकेजों को संपादित किए बिना बड़े पैकेजों की संरचना को पुनर्व्यवस्थित करने में सक्षम है। इसके अलावा, पैकेज के अंदर एक मॉड्यूल आसानी से रिश्तेदार आयात के बिना खुद को आयात नहीं कर सकता है।
पाइथन में रिश्तेदार आयात का उपयोग कब या क्यों करना है, यह भी लगभग डुप्लिकेट प्रश्न देखें
बेशक यह अभी भी स्वाद के मामले में खड़ा है। हालांकि रिश्तेदार आयात के साथ कोड को स्थानांतरित करना आसान है, लेकिन यह अप्रत्याशित रूप से चीजों को तोड़ भी सकता है; और आयात का नाम बदलना उतना मुश्किल नहीं है।
PEP 328 उपयोग से नए व्यवहार के लिए मजबूर करने के लिए:
from __future__ import absolute_import
इस मामले में, निहित सापेक्ष आयात अब संभव import localfile
नहीं होगा (जैसे अब केवल काम नहीं करेगा from . import localfile
)। स्वच्छ और भविष्य के प्रमाण व्यवहार के लिए, निरपेक्ष_समूह का उपयोग करना उचित है।
एक महत्वपूर्ण चेतावनी यह है कि PEP 338 और PEP 366 के कारण , सापेक्ष आयातों के लिए अजगर को मॉड्यूल के रूप में आयात करने की आवश्यकता होती है - आप किसी ऐसे फ़ाइलहोम को निष्पादित नहीं कर सकते हैं जिसका कोई रिश्तेदार आयात करता है या आपको एक मिलेगा ValueError: Attempted relative import in non-package
।
सर्वोत्तम दृष्टिकोण का मूल्यांकन करते समय इस सीमा को ध्यान में रखा जाना चाहिए। गुइडो किसी भी मामले में एक मॉड्यूल से स्क्रिप्ट चलाने के खिलाफ है:
मैं इस पर और __main__ मशीनरी के किसी अन्य प्रस्तावित ट्विडलिंग पर हूँ। एकमात्र उपयोग मामला स्क्रिप्ट को चलाने वाला लगता है जो कि मॉड्यूल की निर्देशिका के अंदर रहने वाला होता है, जिसे मैंने हमेशा एक एंटीपैटर्न के रूप में देखा है। मुझे अपना मन बदलने के लिए आपको मुझे विश्वास दिलाना होगा कि यह नहीं है।
मामले पर व्यापक चर्चा एसओ पर पाई जा सकती है; कर रहे हैं। अजगर 3 यह काफी व्यापक है:
from _ import ...
, इसलिए आपके उदाहरण होंगेfrom .. import A
औरfrom . import B