2013-03-04 29 views
7

Tôi đã vật lộn hầu hết đêm cố gắng giải quyết lỗi nhập.Python không thể nhập tên <class>

Đây là vấn đề phổ biến nhưng không có câu hỏi nào trước đây trả lời khá rõ vấn đề của tôi.

Tôi đang sử dụng PyDev (một plugin Eclipse), và thư viện Kivy (thư viện Python)

Tôi có một cấu trúc tập tin thiết lập như thế này:

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

"mã" được tổ chức trong vòng thư mục eclipse "MyProject" nhưng nó không phải là một gói vì vậy tôi đã không bao gồm nó.

Các tập tin giống như thế này:

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 

Các lỗi tôi nhận được, trong đầy đủ chi tiết, là:

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 

Bất kỳ ý tưởng nào tôi đã làm sai ở đây? Tôi vừa đổi tên toàn bộ cấu trúc thư mục của mình vì tôi đã làm hỏng cấu trúc mô-đun này quá tệ, nhưng tôi nghĩ tôi gần giống như thế nào ....

+3

Bản sao có thể có của [ImportError: Không thể nhập tên X] (http://stackoverflow.com/questions/9252543/importerror-cannot-import-name-x) –

Trả lời

5

nó nằm trong cùng một thư mục, sử dụng tên gói tương đối một thực hành tốt để làm như vậy anyway):

from .engine import Engine 
+0

không phải code.engine? Sẽ không có ý nghĩa hơn, vì nó là tất cả bên trong một gói "mã" gốc? – MintyAnt

+0

Thông thường, thực tiễn tốt là sử dụng nhập khẩu tương đối khi nhập những thứ từ dự án của riêng bạn. –

+1

Đủ công bằng.Tôi chỉ thử nó, không may mắn, nó ném cùng một lỗi, cùng một dòng. "không thể nhập tên Công cụ" – MintyAnt

1

thư mục mã của bạn một gói. Đảm bảo rằng thư mục ở trên nó, tức là đánh số C:\MyProject từ các thông báo lỗi của bạn, nằm trong PYTHONPATH của bạn.

Mở menu ngữ cảnh bằng cách chọn dự án của bạn và nhấp vào nút bên phải của chuột, sau đó chọn Thuộc tính. Chọn PyDev - PYTHONPATH và từ đó, Thư mục nguồn tab. Kiểm tra xem thư mục đã đề cập ở trên có hiện diện hay không; nếu nó không được nhấn Thêm thư mục nguồn, chọn thư mục đó từ hộp thoại và bấm OK.

8

Dường như có một lần nhập vòng tròn. từ engine.py bạn đang nhập main_menu_widget trong khi từ main_menu_widget bạn đang nhập engine.

Đó rõ ràng là nhập khẩu vòng tròn không được python cho phép.

+1

Yay Python 2 cho bạn biết sự cố – mafrosis

Các vấn đề liên quan