【问题标题】:Unintentionally overwriting Python 2.7 standard module - how to prevent?无意覆盖 Python 2.7 标准模块 - 如何防止?
【发布时间】:2019-03-15 23:00:20
【问题描述】:

我想在 Python 的日志记录模块中添加一些东西,所以我在包名称“my”下创建了一个单独的模块,它位于项目目录中(这是 sys.path 中的第一个条目)。我还有另一个模块,它住在同一个空间:

my
my.logging
my.something

现在我想在my.something 中记录内容并将import logging 添加到文件中-但似乎Python 加载my.logging 而不是标准模块。

在阅读 Python 文档(第 6.1.2 节。模块搜索路径)时,我认为我是安全的:

当导入名为 spam 的模块时,解释器首先搜索具有该名称的内置模块。如果没有找到,它会在变量 sys.path 给出的目录列表中搜索名为 spam.py 的文件。

所以“标准模块”不是“内置模块”?那么我想,我必须将 my 模块移出当前目录 - ?其他可能性?

【问题讨论】:

    标签: python module python-import


    【解决方案1】:

    当它说“内置模块”时,那行文档指的是实际直接编译到 Python 可执行文件中的模块。您可以查看sys.builtin_module_names中的那些。

    您需要做的是关闭隐式相对导入,这可以使用 absolute_import 未来语句在每个文件的基础上完成:

    from __future__ import absolute_import
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-12
      • 1970-01-01
      • 2017-10-20
      • 1970-01-01
      • 1970-01-01
      • 2013-12-26
      • 2019-07-14
      • 1970-01-01
      相关资源
      最近更新 更多