2009-08-03 146 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