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

Cor*_*ory 67 python python-import

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

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

# myapp/email.py
from email import message_from_string
Run Code Online (Sandbox Code Playgroud)

它只发现自己,因此提出了一个ImportError,因为myapp.email没有message_from_string方法. import email我尝试时会导致同样的问题email.message_from_string.

有没有本地支持在Python中执行此操作,或者我是否仍然将我的"电子邮件"模块重命名为更具体的内容?

Gre*_*ill 94

您将需要阅读解决此问题的Absolute和Relative Imports.使用:

from __future__ import absolute_import
Run Code Online (Sandbox Code Playgroud)

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

注意:上面的from ...行需要放在你正在使用.pyimport ...行之上的任何2.x Python 文件中.在Python 3.x中,这是默认行为,因此不再需要.