Quiero importar subcarpetas como módulos. Por lo tanto, cada subcarpeta contiene un __init__.py
. Mi estructura de carpetas es la siguiente:Importar módulo de la subcarpeta
src\
main.py
dirFoo\
__init__.py
foofactory.py
dirFoo1\
__init__.py
foo1.py
dirFoo2\
__init__.py
foo2.py
En mi script principal importo
from dirFoo.foofactory import FooFactory
En este archivo de la fábrica incluyo los submódulos:
from dirFoo1.foo1 import Foo1
from dirFoo2.foo2 import Foo2
Si llamo a mi foofactory I obtener el error, que python no puede importar los submódulos foo1 y foo2:
Traceback (most recent call last):
File "/Users/tmp/src/main.py", line 1, in <module>
from dirFoo.foofactory import FooFactory
File "/Users/tmp/src/dirFoo/foofactory.py", line 1, in <module>
from dirFoo1.foo1 import Foo1
ImportError: No module named dirFoo1.foo1
Una cosa para recordar! agregue '__init __. py' a cada subcarpeta desde la que está importando. –
Vaciar '__init __. Py' puede hacer el trabajo. – cerebrou
¿Cuál sería la sintaxis si previamente 'Foo1' estaba en el directorio padre y uno codificado como' from Foo1 import * '. ¿Hay alguna manera de lograr el mismo efecto para que no tengas que prefijar todo con 'Foo1'? – jxramos