将导入的模块保留在python包命名空间之外

时间:2010-10-06 13:47:39

标签: python

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

我的问题是,如果不是这样,那是否理智,怎么办呢。

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

  • 更好地构建您的包,并至少将命名空间混乱推送到子模块
  • 在您的包中使用import X as _X来区分包API的实现细节
  • 从函数内部导入内容( blegh

1 个答案:

答案 0 :(得分:1)

  

我的问题是,这是否理智

这是理智的。执行import fish只会在命名空间中添加一个名称,而不是“名称空间混乱”。这几乎是模块背后的重要思想,将许多东西归为一个名称!

如果您想了解模块的功能,请查看文档或致电help,不要dir

Python中的所有名称都存储在dictonaries中。这意味着无论你看到多少个名字,查找其中一个名字都需要不间断的时间。因此,任何一种都没有速度缺陷。