Given a directory structure like this
/main/
/main/common/foo.py
/main/A/
/main/A/src/
/main/A/src/bar.py
How can I use Python's relative imports to import foo
from bar
? I've got a working solution by adding it to the path, but this is ugly. Is there a way to simply do with a single import
in Python 2.7?
This is a more complex version of this question:
The correct relative import would be this:
However, relative imports are only meant to work within one package. If
main
is a package, then you can use relative imports here. Ifmain
is not a package, you cannot.Thus, if you're running a script in
/main/
and doing something likeimport A.src.bar
, then that relative import will fail with "Attempted relative import beyond toplevel package". This is because the relative import is trying to import something outside of the toplevel packageA
.However, if you're running a script in
/
and doing something likeimport main.A.src.bar
, then that relative import will succeed becausemain
is now a package. In that case, the following two would be equivalent:To answer your comment: the meaning of the
.
doesn't change depending on where the script was run from, it changes depending on what the package structure is.