73

我有一个与内置模块冲突的模块。例如,myapp.emailmyapp/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 中执行此操作,或者我是否坚持将我的“电子邮件”模块重命名为更具体的内容?

4

1 回答 1

100

你会想阅读解决这个问题的绝对和相对导入。采用:

from __future__ import absolute_import

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

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

于 2009-08-03T21:38:47.603 回答