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

62,257

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.

Share:
62,257
Alex
Author by

Alex

Updated on March 10, 2020

Comments

  • Alex
    Alex about 4 years

    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.