无法使用简单的import语句从子目录导入python模块

时间:2013-01-27 19:28:38

标签: python

所以我想从python包导入一个模块,该包是主脚本所在的子目录。这是目录结构:

maindir \
  - main.py
  - modules \
    - __init__.py
    - module.py

我觉得奇怪的是,我无法使用简单的module.py导入import modules.module,因为当我尝试在module.foo()中调用函数main.py时,它会返回NameError: name 'module' is not defined。但是,当我执行import modules.module as module时,一切正常,与from modules import module相同。当module.pymain.py位于同一目录时,简单的import module就足以调用module.foo()

现在问题是,为什么?为什么一个简单的import语句不足以从包中导入模块而不是脚本所在的目录?或者我做错了什么?我真的很感激,因为我现在很困惑......

2 个答案:

答案 0 :(得分:2)

它确实导入了模块,它只是不能直接访问它的名称。执行import foo.bar时,导入的名称为foobar只能作为其属性进行访问。如果这是您想要的,您可以使用这种形式的导入;这就是它的用途。如果您不想这样,请使用不同形式的import语句。

如果您希望能够键入module而不是modules.module,请按照您找到的import modules.module as module进行操作,或执行from modules import module

答案 1 :(得分:2)

导入时,仍然需要使用完整的包语法来使用函数foo。

以下应该有效

import modules.module
modules.module.foo() 

更好的方法是

from modules import module
module.foo()

第三种不那么优雅的方式(但与上面完全相同)是:

import modules.module as module
module.foo()