关于python:’尝试在非包中进行相对导入’虽然在一个目录中包含__init__.py

'Attempted relative import in non-package' although packages with __init__.py in one directory

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

1
from .basic import BasicModule

文件basic.py__init__.py位于同一目录中。但是,当我尝试运行它时:

1
python extended.py

我得到错误:

1
ValueError: Attempted relative import in non-package

同时添加行:

1
from __future__ import absolute_import

不能解决问题。也许我太累了,看不到明显的东西——但我看不到问题所在。


相对导入仅适用于包,但当您在extended.py中导入时,您将运行一个顶级模块。

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

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

1
2
3
4
5
6
main.py

packagename\
    __init__.py
    basic.py
    extended.py

然后在main.py中:

1
import packagename.extended

只有这样,extended才是一揽子计划的一部分,并做相关的进口工作。

现在,相对进口与packagename父母有关系。