我有一个名为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
无法解决问题。 也许我太累了,看不到明显的 - 但我没有在这里看到问题。
答案 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
父级的内容。