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

python, python-2.7, python-import

Solution

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.

Problem

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.

Original source

Related problems