2013-03-04 12 views
7

मैं आयात की समस्या को हल करने की कोशिश कर रहे अधिकांश रात कुश्ती कर रहा हूं।पायथन नाम आयात नहीं कर सकता <class>

यह एक आम मुद्दा है, लेकिन कोई पिछले प्रश्न मेरे मुद्दे का काफी जवाब नहीं देता है।

मैं PyDev (एक ग्रहण प्लगइन), और पुस्तकालय Kivy (एक अजगर पुस्तकालय)

मैं एक फ़ाइल संरचना इस तरह की स्थापना की है उपयोग कर रहा हूँ:

<code> 
    __init__.py 
    main.py 
    engine.py 
    main_menu_widget.py 

"कोड" के भीतर आयोजित किया जाता है ग्रहण फ़ोल्डर "MyProject" लेकिन यह एक पैकेज नहीं है इसलिए मैंने इसे शामिल नहीं किया।

फ़ाइलें इस तरह दिखेगा:

main.py

# main.py 
from code.engine import Engine 

class MotionApp(App): 
    # Ommited 

engine.py

# engine.py 
from code.main_menu_widget import MainMenuWidget 

class Engine(): 
    # Ommited 

main_menu_widget.py

# main_menu_widget.py 
from code.engine import Engine 

class MainMenuWidget(Screen): 
    pass 

त्रुटि मैं मिल जाए, तो में पूर्ण विवरण, है:

Traceback (most recent call last): 
    File "C:\MyProject\code\main.py", line 8, in <module> 
    from code.engine import Engine 
    File "C:\MyProject\code\engine.py", line 6, in <module> 
    from code.main_menu_widget import MainMenuWidget 
    File "C:\MyProject\code\main_menu_widget.py", line 3, in <module> 
    from code.engine import Engine 

कोई विचार क्या मैंने यहां गलत किया? मैंने बस अपनी संपूर्ण फ़ोल्डर संरचना का नाम बदल दिया क्योंकि मैंने इस मॉड्यूल संरचना को इतना खराब कर दिया है, लेकिन मुझे लगता है कि मैं इसे कैसे देखना चाहिए इसके करीब हूं ....

+3

[आयात त्रुटि: नाम एक्स आयात नहीं कर सकता] का संभावित डुप्लिकेट (http://stackoverflow.com/questions/9252543/importerror-cannot-import-name-x) –

उत्तर

5

यह एक ही फ़ोल्डर में है, एक सापेक्ष पैकेज नाम का उपयोग करें (यह है एक अच्छा अभ्यास तो वैसे भी ऐसा करने के लिए):

from .engine import Engine 
+0

code.engine नहीं है? क्या यह अधिक समझ में नहीं आता है, क्योंकि यह सब रूट "कोड" पैकेज के अंदर है? – MintyAnt

+0

आम तौर पर अपने स्वयं के प्रोजेक्ट से चीजें आयात करते समय सापेक्ष आयात का उपयोग करना एक अच्छा अभ्यास है। –

+1

पर्याप्त मेला।मैंने बस कोशिश की, कोई भाग्य नहीं, यह वही त्रुटि, एक ही पंक्ति फेंकता है। "नाम इंजन आयात नहीं कर सकता" – MintyAnt

1

आपका कोड निर्देशिका एक पैकेज है। सुनिश्चित करें कि इसके ऊपर की निर्देशिका, i.e C:\MyProject आपके त्रुटि संदेशों से निर्णय लेना आपके PYTHONPATH में है।

अपनी परियोजना का चयन करके और अपने माउस के दाएं बटन पर क्लिक करके संदर्भ मेनू खोलें, फिर गुण चुनें। पायडेव - पायथनपैथ और वहां से स्रोत फ़ोल्डर टैब का चयन करें। जांचें कि ऊपर वर्णित निर्देशिका मौजूद है; यदि यह दबाएं तो स्रोत फ़ोल्डर जोड़ें, इसे संवाद से चुनें और ठीक दबाएं।

8

एक परिपत्र आयात प्रतीत होता है। engine.py से आप main_menu_widget आयात कर रहे हैं जबकि main_menu_widget से आप engine आयात कर रहे हैं।

यह स्पष्ट रूप से एक परिपत्र आयात है जिसे पायथन द्वारा अनुमति नहीं है।

+1

यय पायथन 2 आपको समस्या बता रहा है – mafrosis

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