I have two python modules, a.py
and b.py
, both of which are in lib/
relative to the current directory. Suppose each module needs the functionality of the other.
a.py:
import lib.b
...
b.py:
import lib.a
...
The above example works with
PYTHONPATH=./lib python -c 'from lib import a, b'
However, if I switch the imports in a.py
and b.py
to from lib import b
and from lib import a
, respectively, the above Python command terminates with ImportError
.
Could someone please explain why this breaks? I'm not trying to import any member from either a
or b
. (In that case I would be importing from an uninitialized module, as the question referenced below points out.)
Since there did not seem to be a direct way to address the circular import, I went with a workaround.
In my actual use case, module a
imported module b
only to call the function b.fn
, so I decided to put fn
in a third module c
and import c
instead:
def fn():
...
from lib import a
from lib import c
...
# Explicitly assign `fn` into this module.
fn = c.fn
(The above could also be done with from lib.c import fn
, but I prefer the explicit version.)
from lib import c
...
That way, the circular import between a
and b
is gone, and any additional modules that import b
can use b.fn
directly.
in your lib folder there is a __init__.py file? If yes you have 2 possibility:
1) __init__.py is empty and you can use from lib import a,b
a.foo b.bar
2) in your __init__.py there are istructions import a,b in this case you can write
import lib.a as a import lib.b as b
hope this help you
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.