Dado que el interés de este tema es obtener nombres totalmente calificados, aquí hay una trampa que ocurre cuando se usan importaciones relativas junto con el módulo principal existente en el mismo paquete. Por ejemplo, con la siguiente configuración del módulo:
$ cat /tmp/fqname/foo/__init__.py
$ cat /tmp/fqname/foo/bar.py
from baz import Baz
print Baz.__module__
$ cat /tmp/fqname/foo/baz.py
class Baz: pass
$ cat /tmp/fqname/main.py
import foo.bar
from foo.baz import Baz
print Baz.__module__
$ cat /tmp/fqname/foo/hum.py
import bar
import foo.bar
Aquí está el resultado que muestra el resultado de importar el mismo módulo de manera diferente:
$ export PYTHONPATH=/tmp/fqname
$ python /tmp/fqname/main.py
foo.baz
foo.baz
$ python /tmp/fqname/foo/bar.py
baz
$ python /tmp/fqname/foo/hum.py
baz
foo.baz
Cuando hum importa la barra usando la ruta relativa, la barra solo ve Baz.__module__
"baz", pero en la segunda importación que usa el nombre completo, la barra ve lo mismo que "foo.baz".
Si persiste los nombres completos en alguna parte, es mejor evitar las importaciones relativas para esas clases.