अजगर रिश्तेदार आयात नहीं रह गया है बिल्कुल अनुशंसित हैं, लेकिन absolute_import उपयोग करने की सशक्त उस मामले में सुझाव दिया है।
"यह ज्यादातर ऐतिहासिक नहीं है नई रिश्तेदार आयात वाक्य रचना लागू किया गया था वहाँ रिश्तेदार आयात के साथ विभिन्न समस्याओं थे अल्पकालिक समाधान था जब तक:।
कृपया this discussion का हवाला देते हुए गुइडो खुद को देखने के । उनका उपयोग न सिफारिश करने के लिए लंबी अवधि के समाधान एक स्पष्ट वाक्य रचना को लागू करने के लिए था अब यह के लिए समय अनुशंसा-रोधी वापस लेने है बेशक, पानी में गिर जा रहा बिना - मैं अभी भी उन्हें एक अधिग्रहीत स्वाद प्राप्त होता है;।। लेकिन वे उनकी जगह है"
ओपी सही ढंग से लिंक PEP 328 कि कहते हैं:
कई उपयोग के मामलों प्रस्तुत किए गए, जिनमें से सबसे महत्वपूर्ण करने के लिए उप संपादित बिना बड़े पैकेज की संरचना पुनर्व्यवस्थित करने के लिए सक्षम किया जा रहा है -packages। इसके अतिरिक्त, एक पैकेज के अंदर एक मॉड्यूल को आसानी से नहीं आयात ही रिश्तेदार के आयात के बिना।
भी देख सकते हैं लगभग डुप्लिकेट प्रश्न When or why to use relative imports in Python
बेशक यह अभी भी स्वाद के मामले के रूप में खड़ा है। हालांकि सापेक्ष आयात के साथ कोड को स्थानांतरित करना आसान है, लेकिन यह अप्रत्याशित रूप से चीजों को तोड़ सकता है; और आयात का नाम बदलना मुश्किल नहीं है।
पीईपी 328 उपयोग से नए व्यवहार के लिए मजबूर करने के लिए:
from __future__ import absolute_import
इस मामले में, निहित रिश्तेदार आयात करना संभव नहीं होगा (जैसे import localfile
, अब काम नहीं करेगा केवल from . import localfile
।)। स्वच्छ और भविष्य के सबूत व्यवहार के लिए, absolute_import का उपयोग करके सलाह दी जाती है।
एक महत्वपूर्ण चेतावनी है कि क्योंकि PEP 338 और PEP 366 की, रिश्तेदार आयात अजगर फ़ाइल की आवश्यकता होती है एक मॉड्यूल के रूप में आयात किया जा रहा है - आप एक file.py एक रिश्तेदार आयात किया है कि निष्पादन नहीं कर सकते हैं या आप एक ValueError: Attempted relative import in non-package
मिलेगा।
इस सीमा को सर्वोत्तम दृष्टिकोण का मूल्यांकन करते समय ध्यान में रखा जाना चाहिए। Guido किसी भी मामले में मॉड्यूल से स्क्रिप्ट चलाने के खिलाफ है:
मैं इस पर और __main__ मशीनरी के किसी अन्य प्रस्तावित twiddlings पर -1 हूँ। एकमात्र उपयोग केस एक मॉड्यूल की निर्देशिका के अंदर रहने वाली स्क्रिप्ट चल रहा है, जिसे मैंने हमेशा एंटीपाटर के रूप में देखा है। मुझे अपना दिमाग बदलने के लिए आपको मुझे यह समझाना होगा कि यह नहीं है।
इस मामले पर संपूर्ण चर्चाएं एसओ पर पाई जा सकती हैं; कर रहे हैं। अजगर 3 यह काफी व्यापक है:
हाँ, यह वहाँ पिछली बार मैं पीईपी 8 के माध्यम से पढ़ा नहीं था! –
@ राफ, "कुछ अच्छी तरह से लिखित परियोजनाओं को देखो ..." कोई सुझाव? – denis
@ डेनिस: रिटेलवेल्ड गिडो वैन रॉसम की अपनी परियोजना है, इसलिए मुझे लगता है कि यह देखने के लिए एक अच्छी जगह होगी (http://code.google.com/p/rietveld/)। पायथन मानक पुस्तकालय इतना अच्छा नहीं है, उस कोड में से बहुत से सम्मेलन का पालन नहीं करते हैं। –