36

我有一个名为的模块extended.py,其中包含以下行:

from .basic import BasicModule

并且该文件basic.py__init__.py. 但是,当我尝试将其运行为:

python extended.py

我得到错误:

ValueError: Attempted relative import in non-package

还添加以下行:

from __future__ import absolute_import

不能解决问题。也许我太累了,看不到明显的东西-但我看不到这里的问题。

4

1 回答 1

56

相对导入仅适用于包,但是当您导入时,extended.py您正在运行顶级模块

当前目录可能包含一个__init__.py文件,但它还没有成为exended.py包的一部分。

对于要被视为包的东西,您需要导入目录名称。以下将起作用:

main.py

packagename\
    __init__.py
    basic.py
    extended.py

然后输入main.py

import packagename.extended

然后extended成为包的一部分并进行相对导入工作。

相对导入现在有一些相对于packagename父级的东西。

于 2013-02-02T17:14:14.727 回答