Python:来自__init__中的模块导入*

时间:2013-05-28 20:32:57

标签: python import python-module

这是一个简单的例子:我想在python名称中定义一个模块。所以,我有一个名为robot的文件夹,包含这两个文件:

__ INIT __ PY:

from test import a

test.py:

a = "hello world"

现在,当我在解释器中import robot时,robot命名空间包含testa。但是,我只希望它包含a。为什么这种奇怪的行为?


编辑:

这是我想要实现的更具代表性的例子:

给出以下文件:

__ INIT __ PY:

from spam import a
import ham

spam.py:

a = "hello world"

ham.py:

b = "foo"

我的顶级robota是否可以ham,而不是spam

2 个答案:

答案 0 :(得分:0)

您不仅创建了模块,还创建了一个包。包在其命名空间中包含其子模块(一旦导入它们,就像您在此处导入test一样)。这是应该的,因为使用包的通常方式是提供几个模块的分组。制作一个只包含一个模块(即一个内容.py文件)的包没有多大用处。

如果您只想要一个单文件模块,只需创建一个名为robots.py的文件并将代码放在那里。

修改:请参阅this previous question。答案是,您通常不必担心从包命名空间中排除模块名称。模块假设位于包名称空间中。如果你想从子模块中添加函数和东西,为了方便起见,那很好,但是通过“覆盖你的轨道”并隐藏你导入的模块并没有什么可以获得的。但是,如该问题的答案中所述,有一些黑客方法可以近似你想要的东西。

答案 1 :(得分:0)

您是否只是询问如何导入特定的模块或功能?

test.py:

import robot.spam.a
import robot.ham

不要导入整个包。