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

我有一个与内置模块冲突的模块。 例如, 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中,这是默认行为,所以不再需要。