所以我想从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.py
与main.py
位于同一目录时,简单的import module
就足以调用module.foo()
。
现在问题是,为什么?为什么一个简单的import
语句不足以从包中导入模块而不是脚本所在的目录?或者我做错了什么?我真的很感激,因为我现在很困惑......
答案 0 :(得分:2)
它确实导入了模块,它只是不能直接访问它的名称。执行import foo.bar
时,导入的名称为foo
,bar
只能作为其属性进行访问。如果这是您想要的,您可以使用这种形式的导入;这就是它的用途。如果您不想这样,请使用不同形式的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()