'尝试在非包中进行相对导入'尽管在一个目录中包含了__init__.py

时间:2013-02-02 17:10:58

标签: python python-2.7 python-import

我有一个名为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

无法解决问题。 也许我太累了,看不到明显的 - 但我没有在这里看到问题。

1 个答案:

答案 0 :(得分:49)

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

当前目录可能包含__init__.py文件,但尚未使exended.py成为程序包的一部分。

要将某些内容视为包,您需要导入目录名。以下方法可行:

main.py

packagename\
    __init__.py
    basic.py
    extended.py

然后在main.py put:

import packagename.extended

只有然后extended包的一部分,并进行相对导入工作。

相对导入现在具有相对于packagename父级的内容。