Let's say I have the following directory structure:
a\
__init__.py
b\
__init__.py
c\
__init__.py
c_file.py
d\
__init__.py
d_file.py
In the a
package's __init__.py
, the c
package is imported. But c_file.py
imports a.b.d
.
The program fails, saying b
doesn't exist when c_file.py
tries to import a.b.d
. (And it really doesn't exist, because we were in the middle of importing it.)
How can this problem be remedied?
You may defer the import, for example in a/__init__.py
:
def my_function():
from a.b.c import Blah
return Blah()
that is, defer the import until it is really needed. However, I would also have a close look at my package definitions/uses, as a cyclic dependency like the one pointed out might indicate a design problem.