尝试导入与内置模块同名的模块会导致导入错误

时间:2009-08-03 21:34:46

标签: python python-import

我有一个与内置模块冲突的模块。例如,myapp.email中定义的myapp/email.py模块。

我可以在代码中的任何位置引用myapp.email而不会出现问题。但是,我需要从我的电子邮件模块中引用内置电子邮件模块。

# myapp/email.py
from email import message_from_string

它只能找到自己,因此会引发ImportError,因为myapp.email没有message_from_string方法。当我尝试import email时,email.message_from_string会导致同样的问题。

在Python中是否有任何本机支持,或者我是否仍然将我的“电子邮件”模块重命名为更具体的内容?

1 个答案:

答案 0 :(得分:93)

您需要了解解决此问题的Absolute and Relative Imports。使用:

from __future__ import absolute_import

使用它,任何未加修饰的包名称将始终引用顶级包。然后,您需要使用相对导入(from .email import ...)来访问自己的包。

注意:上述from ...行需要放入您正在使用的.py行之上的任何2.x Python import ...文件中。在Python 3.x中,这是默认行为,因此不再需要。