2013-03-22 23 views
5

Tôi có một gói cha mẹ có 2 gói con. Dường nhưKhông thể nhập các mô-đun của các gói cha trong các gói con

backend 
    __init__.py 
    conf.py 
    db.py 
    connections.py 
    /api 
     __init__.py 
     register.py 
     api.py 
    /scheduled 
     __init__.py 
     helpers.py 

All the __init__.py files are empty.

Các mã này trong backend/connections.pybackend/conf.py đang được sử dụng bởi các module trong cả hai gói apischeduled.

trong register.py i có mã như

from backend.conf import * 
from backend.connections import * 

Bây giờ khi tôi làm python register.py tôi nhận được lỗi này

ImportError: No module named backend.conf 

Ngoài ra khi tôi thay đổi from backend.conf import * để from ..conf import * hoặc from .. import conf tôi nhận được lỗi này

ValueError: Attempted relative import in non-package 

Điều tôi hiểu bởi lỗi trên là python không xử lý các thư mục ở trên làm gói. Nhưng tôi có __init__.py trong tất cả các thư mục. Chuyện gì thế?

+0

@MrE tại sao 'kết nối' không phải là mô-đun? tất cả các tệp '__init __. py' đều trống. – lovesh

Trả lời

5

Khi bạn chạy python register.py, tệp backend/register.py của bạn được sử dụng làm mô-đun __main__ của chương trình, thay vì làm mô-đun trong gói backend. Hơn nữa, đường dẫn nhập khẩu Python sẽ không tự động bao gồm thư mục chứa thư mục backend, có thể là nguyên nhân gây ra sự cố của bạn.

Một tùy chọn có thể hoạt động là chạy chương trình của bạn dưới dạng python -m backend.register từ thư mục cấp cao nhất của dự án của bạn (hoặc đặt PYTHONPATH để có thể tìm thấy mô-đun này). Thao tác này sẽ tìm kiếm tập lệnh trên đường dẫn nhập bình thường và sau đó chạy nó làm chương trình chính.

+0

@lovesh: Tóm lại, bạn không thể đặt một mô-đun chính trong một gói con. – martineau

+0

Như tôi đã nói trong câu trả lời của tôi, bạn có thể nếu bạn bắt đầu chương trình của bạn với 'python -m'. –

+0

Chính xác - một lý do chính đáng để không thử - có lẽ tôi nên nói "..bạn không cần đặt một mô-đun chính trong gói phụ". – martineau

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