【问题标题】:Trying to import module with the same name as a built-in module causes an import error尝试导入与内置模块同名的模块会导致导入错误
【发布时间】:2010-11-16 12:29:47
【问题描述】:

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

【问题讨论】:

    标签: python python-import


    【解决方案1】:

    您会想了解解决这个问题的Absolute and Relative Imports。使用:

    from __future__ import absolute_import
    

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-16
      • 2019-07-01
      • 2019-01-05
      • 2020-11-05
      • 1970-01-01
      • 2017-05-31
      • 2011-10-29
      • 1970-01-01
      相关资源
      最近更新 更多