2009-08-03 13 views
58

Tôi có mô-đun xung đột với mô-đun tích hợp. Ví dụ: mô-đun myapp.email được xác định trong myapp/email.py.Đang thử nhập mô-đun có cùng tên với mô-đun tích hợp gây ra lỗi nhập

Tôi có thể tham chiếu myapp.email ở bất kỳ đâu trong mã của mình mà không gặp sự cố. Tuy nhiên, tôi cần tham khảo mô-đun email tích hợp từ mô-đun email của mình.

# myapp/email.py 
from email import message_from_string 

Nó chỉ thấy mình, và do đó đặt ra một ImportError, vì myapp.email không có một phương pháp message_from_string. import email gây ra sự cố tương tự khi tôi thử email.message_from_string.

Có hỗ trợ gốc nào để thực hiện việc này bằng Python hay không, tôi có bị đổi tên với mô-đun "email" của mình thành mô-đun cụ thể hơn không?

Trả lời

83

Bạn sẽ muốn đọc khoảng Absolute and Relative Imports giải quyết vấn đề này. Sử dụng:

from __future__ import absolute_import 

Sử dụng tên đó, bất kỳ tên gói chưa được trang trí nào sẽ luôn tham chiếu đến gói cấp cao nhất. Sau đó, bạn sẽ cần phải sử dụng nhập khẩu tương đối (from .email import ...) để truy cập gói của riêng bạn.

LƯU Ý: Trên đây from ... dòng cần phải được đưa vào bất kỳ Python 2.x .py file trên import ... dòng bạn đang sử dụng. Trong Python 3.x đây là hành vi mặc định và do đó không còn cần thiết nữa.

+1

Lifesaver ...... –

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