¿Cómo puedo hacer que estas importaciones relativas funcionen en Python 3?
Tengo una estructura de directorios que se parece a esto:
project/
__init__.py
foo/
__init.py__
first.py
second.py
third.py
plum.py
Enproject/foo/__init__.py
Yo importo clases defirst.py
, second.py
ythird.py
y ponerlos en__all__
.
Hay una clase enfirst.py
llamadoWonderfulThing
que me gustaría usar ensecond.py
, y quiere importar importando*
desdefoo
. (Está fuera del alcance de esta pregunta por qué me gustaría hacerlo, suponiendo que tengo una buena razón).
Ensecond.py
He intentadofrom .foo import *
, from foo import *
yfrom . import *
y en ninguno de estos casos esWonderfulThing
importado. Yo tambien lo intentéfrom ..foo import *
, que genera un error "Intento de importación relativa más allá del paquete de nivel superior".
He leído los documentos y el PEP, y no puedo averiguar cómo hacer que esto funcione. Cualquier ayuda sería apreciada.
Aclaración / Edición: Parece que podría haber estado malinterpretando el camino__all__
Trabajos en paquetes. Lo estaba usando igual que en los módulos,
from .first import WonderfulThing
__all__ = [ "WonderfulThing" ]
Pero mirando los documentos de nuevo, parece sugerir que__all__
solo se puede utilizar en paquetes para especificar los nombres de los módulos que se importarán de forma predeterminada; No parece haber ninguna manera de incluir algo que no sea un módulo.
¿Es esto correcto?
Editar: Falló una importación sin comodín (cannot import name WonderfulThing
). Molestofrom . import foo
fallado, peroimport foo
trabajos. Desafortunadamente,dir(foo)
no muestra nada