Imagine this directory structure:
app/
__init__.py
sub1/
__init__.py
mod1.py
sub2/
__init__.py
mod2.py
I'm coding mod1
, and I need to import something from mod2
. How should I do it?
I tried from ..sub2 import mod2
, but I'm getting an "Attempted relative import in non-package".
I googled around, but I found only "sys.path
manipulation" hacks. Isn't there a clean way?
All my __init__.py
's are currently empty
I'm trying to do this because sub2 contains classes that are shared across sub packages (sub1
, subX
, etc.).
The behaviour I'm looking for is the same as described in PEP 366 (thanks John B).
Best Answer
The problem is that you're running the module as '__main__' by passing the mod1.py as an argument to the interpreter.
From PEP 328:
In Python 2.6, they're adding the ability to reference modules relative to the main module. PEP 366 describes the change.