Skip to main content
 首页 » 编程设计

python之将导入的模块排除在 python 包命名空间之外

2025年05月04日12kenshinobiy

我注意到,有时如果您在包/模块上调用 dir(),您会在命名空间中看到其他模块,这些模块是作为实现的一部分导入的,并不意味着你使用。例如,如果我从 PyPI 安装 fish 包并导入它,我会看到 fish.sys,它只引用内置的 sys 模块。

我的问题是这是否合理,如果不合理该怎么办。

我认为 __all__ 变量不太相关,因为它仅 影响from X import * 的行为。我看到的选项是:

  • 更好地构建您的包,至少将困惑的命名空间插入子模块
  • 在你的包中使用import X as _X来区分实现细节和你的包API
  • 从你的函数中导入东西(blegh)

请您参考如下方法:

My question is whether that's sane

这是理智的。执行 import fish 只会将一个名称添加到您的命名空间,而不是“命名空间困惑”。这几乎是模块背后的伟大理念,将许多东西归为一个名称!

当你想知道一个模块做什么时,查看文档或调用help,不要做dir。

Python 中的所有名称都存储在字典中。这意味着无论您看到多少个名字,查找其中一个都需要花费恒定的时间。因此也没有任何类型的速度缺陷。