简体   繁体   中英

Relative importing modules from parent folder subfolder

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:

Importing modules from parent folder

The correct relative import would be this:

from ...common import foo

However, relative imports are only meant to work within one package. If main is a package, then you can use relative imports here. If main is not a package, you cannot.

Thus, if you're running a script in /main/ and doing something like import 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 package A .

However, if you're running a script in / and doing something like import main.A.src.bar , then that relative import will succeed because main is now a package. In that case, the following two would be equivalent:

from ...common import foo
from main.common import foo

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.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM