尝试导入具有与内置模块相同名称的模块会导致导入错误
我有一个与内置模块冲突的模块。 例如, 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中,或者我坚持重命名我的“电子邮件”模块更具体的东西?
您将需要阅读有关解决这个问题的绝对和相对导入 。 使用:
from __future__ import absolute_import
使用这个,任何未经修改的包名将始终引用顶层包。 然后,您将需要使用相对导入( from .email import ...
)来访问您自己的软件包。
注意:上面的from ...
行需要放在您正在使用的import ...
行之上的任意2.x Python .py
文件中。 在Python 3.x中,这是默认行为,所以不再需要。