2009-08-03 179 views
58

我有一個與內置模塊衝突的模塊。例如,在myapp/email.py中定義的myapp.email模塊。嘗試導入與內置模塊同名的模塊導致導入錯誤

我可以參考myapp.email我的代碼中的任何地方沒有問題。但是,我需要從我的電子郵件模塊中引用內置的電子郵件模塊。

# myapp/email.py 
from email import message_from_string 

它只是發現自己,並因此引發ImportError,因爲myapp.email沒有一個message_from_string方法。 import email導致同樣的問題,當我嘗試email.message_from_string

是否有任何本地支持來做到這一點在Python中,或者我堅持重命名我的「電子郵件」模塊更具體的東西?

回答

83

你會想要閱讀約Absolute and Relative Imports哪些解決這個問題。使用:

from __future__ import absolute_import 

使用它,任何未修改的軟件包名稱將始終引用頂級軟件包。然後您將需要使用相對導入(from .email import ...)來訪問您自己的軟件包。

注:以上from ...線需要投入任何的Python 2.x的您正在使用的import ...線以上.py文件。在Python 3.x中,這是默認行爲,因此不再需要。

+1

Lifesaver ...... – 2016-02-28 00:16:26