I have a module named extended.py
which contains the following line:
from .basic import BasicModule
and the file basic.py
resides in the same directory as does __init__.py
. However, when I try to run it as:
python extended.py
I get the error:
ValueError: Attempted relative import in non-package
Also adding the line:
from __future__ import absolute_import
does not solve the problem. Maybe I am too tired to see the obvious - but I don't see the problem here.
Relative imports only work for packages, but when you importing in extended.py
you are running a top-level module instead.
The current directory may hold a __init__.py
file but that doesn't make exended.py
part of a package yet.
For something to be considered a package, you need to import the directory name instead. The following would work:
main.py
packagename\
__init__.py
basic.py
extended.py
then in main.py
put:
import packagename.extended
and only then is extended
part of a package and do relative imports work.
The relative import now has something to be relative to, the packagename
parent.