ependências do módulo cíclico e importações relativas em Python
uponha que tenhamos dois módulos com dependências cíclica
# a.py
import b
def f(): return b.y
x = 42
# b.py
import a
def g(): return a.x
y = 43
Os dois módulos estão no diretóriopkg
com um @ vaz__init__.py
. Importandopkg.a
oupkg.b
funciona bem, como explicado emesta resposta. Se eu alterar as importações para importações relativas
from . import b
Eu recebo umImportError
ao tentar importar um dos módulos:
>>> import pkg.a
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "pkg/a.py", line 1, in <module>
from . import b
File "pkg/b.py", line 1, in <module>
from . import a
ImportError: cannot import name a
Por que recebo esse erro? A situação não é praticamente a mesma que acima? (Isso está relacionado aessa questã?)
Edita: Esta questão não é sobre design de software. Estou ciente de maneiras de evitar a dependência circular, mas de qualquer maneira estou interessado no motivo do erro.