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

77

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

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

# myapp/email.py
from email import message_from_string

它只找到了自己,因此会引发 ImportError,因为 myapp.email 没有 message_from_string 方法。当我尝试使用 email.message_from_string 时,import email 也会出现相同的问题。

Python 中是否有本地支持来解决这个问题,或者我必须将我的 "email" 模块重命名为更具体的名称?

1个回答

102

您需要阅读关于绝对和相对导入的内容,这正是解决这个问题的方法。使用:

from __future__ import absolute_import

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接