Desidero importare sottocartelle come moduli. Pertanto ogni sottocartella contiene __init__.py
. La mia struttura di cartelle è come questo:Importare modulo dalla sottocartella
src\
main.py
dirFoo\
__init__.py
foofactory.py
dirFoo1\
__init__.py
foo1.py
dirFoo2\
__init__.py
foo2.py
Nel mio script principale importare
from dirFoo.foofactory import FooFactory
In questo file fabbrica includo i moduli secondari:
from dirFoo1.foo1 import Foo1
from dirFoo2.foo2 import Foo2
Se chiamo il mio foofactory I ottenere l'errore, che python non può importare i sottomodelli foo1 e 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 da ricordare! aggiungi '__init __. py' a ogni sottocartella da cui stai importando. –
Vuoto '__init __. Py' può fare il lavoro. – cerebrou
Quale sarebbe la sintassi se in precedenza 'Foo1' si trovava nella directory padre e uno codificasse qualcosa come' da Foo1 import * '. C'è un modo per ottenere lo stesso effetto in modo da non dover prefissare tutto con 'Foo1'? – jxramos