我有一个与内置模块冲突的模块。例如,在 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 中是否有任何本地支持来执行此操作,或者我是否坚持将我的“电子邮件”模块重命名为更具体的名称?
最佳答案
您会想阅读有关 Absolute and Relative Imports 的内容这解决了这个问题。使用:
from __future__ import absolute_import
使用它,任何朴素的包名称将始终引用顶级包。然后您需要使用相对导入(from .email import ...
)来访问您自己的包。
注意: 上面的 from ...
行需要放入任何 2.x Python .py
文件中 import ...
您正在使用的行。在 Python 3.x 中,这是默认行为,因此不再需要。
关于python - 尝试导入与内置模块同名的模块会导致导入错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8055373/