2011-04-27 13 views
17

मैं पुरानी पायथन कोड का एक गुच्छा बदल रहा हूं जो कभी-कभी संकुल के बीच नाम टकराव में चल रहा है। मेरे पास एक सवाल है कि पूर्ण आयात का उपयोग कब किया जाना चाहिए और क्या यह केवल नाम से समान स्तर के मॉड्यूल आयात करना उचित होगा।पूर्ण आयात का उपयोग कब करें

import package.subX.moduleX 

या

from package.subX import moduleX 

क्या सबपैकेज में के बारे में __init__.py फ़ाइलें:

/package/ 
/package/__init__.py 
/package/subA 
/package/subA/__init__.py 
/package/subA/moduleA.py 
/package/subA/moduleB.py 
/package/subB 
/package/subB/__init__.py 
/package/subB/moduleA.py 
/package/subB/moduleB.py 

पैकेज के भीतर हर इंपोर्ट स्टेटमेंट तरह दिखना चाहिए। यह बस

import moduleA 
import moduleB 

डाल करने के लिए या /package/subA/moduleA.py में, गलत होगा, यह गलत होगा करने के लिए सीधे शब्दों में:

import moduleB 
+0

आप सकता है हमेशा उपनाम के रूप में अच्छी तरह से करता है, तो आप के रूप में, अपने कोड भर में कुछ पात्रों को सहेजना चाहते 'a_moduleA' रूप package.subA आयात moduleA और से' b_moduleA' रूप package.subB आयात moduleA से, एक तरह से गंदा लगता है मेरे लिए, लेकिन यह एक और विकल्प है ... – photoionized

+0

[पाइथन मॉड्यूल के पूर्ण बनाम स्पष्ट सापेक्ष आयात] के संभावित डुप्लिकेट (http://stackoverflow.com/questions/4209641/absolute-vs-explicit-relative-import-of- पायथन-मॉड्यूल) – Stefano

उत्तर

22

सापेक्ष आयात निकला एक बहुत बुरा होने के लिए विचार, भले ही वे लंबे समय तक डिफ़ॉल्ट व्यवहार थे। आप इस साइट पर बहुत से प्रश्न पा सकते हैं जहां किसी ने बिल्टिन मॉड्यूल के बाद अपनी फ़ाइल का नाम दिया और अजीब त्रुटि संदेशों के साथ अपना एप्लिकेशन तोड़ दिया।

यही कारण है कि संकुल समेत हर जगह का संदर्भ देकर पूर्ण आयात करना हमेशा अच्छा होता है। PEP8 से

import myproject.mypackage 
from myproject.mypackage.myfile import MyClass 

उद्धरण::

संक्षेप में, इस शैली का उपयोग

इंट्रा-पैकेज के आयात के लिए सापेक्ष आयात अत्यधिक हतोत्साहित कर रहे हैं। हमेशा सभी आयातों के लिए पूर्ण पैकेज पथ का उपयोग करें। अब भी PEP 328 पाइथन 2.5, में पूरी तरह कार्यान्वित किया गया है, इसकी स्पष्ट सापेक्ष आयात की शैली सक्रिय रूप से निराश है; पूर्ण आयात अधिक पोर्टेबल और आमतौर पर अधिक पठनीय हैं।

+2

पूर्ण आयात के साथ +1 यह देखना आसान है कि आप क्या प्राप्त करने जा रहे हैं। – samplebias

+12

सितंबर 213 तक, यह उत्तर गलत है क्योंकि पीईपी 8 बदल गया है। उदाहरण के लिए: "हालांकि, स्पष्ट रिश्तेदार आयात पूर्ण आयात के लिए एक स्वीकार्य विकल्प हैं, खासकर जटिल पैकेज लेआउट से निपटने पर जहां पूर्ण आयात का उपयोग अनावश्यक रूप से वर्बोज़ होगा" – glarrain

संबंधित मुद्दे