2012-05-04 12 views
13

होना चाहिए मैं पिलिंट के साथ एक मॉड्यूल की जांच कर रहा हूं।पिलिंट: सापेक्ष आयात

/builder 
    __init__.py 
    entity.py 
    product.py 

उत्पाद के भीतर मैं इस तरह इकाई आयात:

from entity import Entity 

लेकिन Pylint अफसोस जताया कि:

************* Module builder.product 
W: 5,0: Relative import 'entity', should be 'builder.entity' 

हालांकि from builder.entity import Entity पैकेज को नहीं पहचानता है, और परियोजना इस संरचना है from ..builder.entity import Entity या तो काम नहीं करता है। पिलिंट के बारे में शिकायत क्या है? धन्यवाद

उत्तर

14

पायथन 2.5 सापेक्ष आयात प्रस्तुत करता है। वे आपको

from .entity import Entity 
+1

बिना किसी सूचना के -1 के लिए धन्यवाद। – glglgl

+3

आपका क्या मतलब है "नया पर्याप्त"? – PlasmaBinturong

+0

@PlasmaBinturong "नया पर्याप्त" पाइथन 2.5 या उससे अधिक में सापेक्ष आयात की शुरूआत को संदर्भित करता है। – glglgl

0

glglgl का उत्तर सही है यदि आपके पास एक नया पायथन संस्करण है।

हालांकि यदि आपको यह सुनिश्चित नहीं करना है कि आप जिस पैकेज को मान्य कर रहे हैं वह आपके PYTHONPATH में है। नीचे दिए गए उदाहरण देखें।

[sebastian ~/tmp/testpy]$ pylint -r n a.py 
************* Module a 
C: 1: Missing docstring 
F: 1: Unable to import 'testpy.b' 
[sebastian ~/tmp/testpy]$ PYTHONPATH=".." pylint -r n a.py 
************* Module a 
C: 1: Missing docstring 
+0

मेरे पास __init__.py है, इसे इंगित करने के लिए धन्यवाद, मैंने अपना प्रश्न संपादित किया। – pistacchio

0

क्या होगा यदि आप product.py के शीर्ष पर निम्न लाइनें शामिल हैं आप मिलता है:

import builder 
print builder 

मेरा अनुमान है कि आप में से कुछ जगह से एक अलग मॉड्यूल/पैकेज builder आयात कर रहे हैं है आपके पायथनपैथ जो आप उपयोग कर रहे हैं उससे पहले है।

6

__init__.py फ़ाइल पिलिंट को लगता है कि आपका कोड एक पैकेज है (अर्थात् "बिल्डर")।

इसलिए जब पिलिंट "इकाई आयात इकाई से" देखता है, तो यह इसे एक अंतर्निहित सापेक्ष आयात के रूप में ठीक से पहचानता है (आप पाइथन 2.6 के बाद से '।' का उपयोग करके स्पष्ट सापेक्ष आयात कर सकते हैं, जैसा कि अन्य पोस्टर ने विज्ञापित किया है) और इसकी रिपोर्ट करता है।

फिर, यदि "builder.entity आयात इकाई से" काम नहीं करता है, तो यह एक पायथनपैथ पीबी है: सुनिश्चित करें कि "बिल्डर" निर्देशिका वाली निर्देशिका आपके पायथनपैथ (एक वैकल्पिक पीबी गुर्ने एलेक्स द्वारा प्रस्तावित) में है। जब तक आप पैकेज लिखने का इरादा नहीं रखते थे, तब तक __init__.py को हटाने का तरीका शायद जाने का तरीका है।

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