0

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

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

我觉得奇怪的是我不能module.py用一个简单的导入import modules.module,因为当我尝试调用它返回的函数module.foo()时。但是,当我这样做时,一切正常,与. 而当位于同一目录下时,一个简单的调用就完全足够了。main.pyNameError: name 'module' is not definedimport modules.module as modulefrom modules import modulemodule.pymain.pyimport modulemodule.foo()

现在的问题是,为什么会这样?为什么一个简单的import语句不足以从包中导入模块而不是脚本所在的目录?还是我做错了什么?非常感谢您的回答,因为我现在很困惑...

4

2 回答 2

2

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

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

于 2013-01-27T19:30:30.573 回答
2

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

下面应该工作

import modules.module
modules.module.foo() 

一个更好的方法是

from modules import module
module.foo()

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

import modules.module as module
module.foo()
于 2013-01-27T19:36:39.347 回答