Módulos de importación relativa de la subcarpeta de la carpeta principal

Dada una estructura de directorios como esta

/main/ /main/common/foo.py /main/A/ /main/A/src/ /main/A/src/bar.py 

¿Cómo puedo usar las importaciones relativas de Python para importar foo desde la bar ? Tengo una solución de trabajo agregándola a la ruta, pero esto es feo. ¿Hay una manera de hacerlo simplemente con una import única en Python 2.7?

Esta es una versión más compleja de esta pregunta:

Importando módulos desde la carpeta padre

La importación relativa correcta sería esta:

 from ...common import foo 

Sin embargo, las importaciones relativas solo deben funcionar dentro de un paquete. Si main es un paquete, puede usar las importaciones relativas aquí. Si main no es un paquete, no puedes.

Por lo tanto, si está ejecutando un script en /main/ y está haciendo algo como import A.src.bar , entonces esa importación relativa fallará con “Se intentó la importación relativa más allá del paquete de nivel superior”. Esto se debe a que la importación relativa está intentando importar algo fuera del paquete A de nivel superior.

Sin embargo, si está ejecutando un script en / y está haciendo algo como import main.A.src.bar , entonces esa importación relativa se realizará correctamente porque main ahora es un paquete. En ese caso, los dos siguientes serían equivalentes:

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

Para responder a su comentario: el significado de la . no cambia según el lugar desde donde se ejecutó el script, sino según la estructura del paquete.