Циклические зависимости модулей и относительный импорт в Python

Предположим, у нас есть два модуля с циклическими зависимостями:

# a.py
import b
def f(): return b.y
x = 42

# b.py
import a
def g(): return a.x
y = 43

Два модуля находятся в каталоге pkg с пустым __ init __. Py . Импорт pkg.a или pkg.b работает нормально, как описано в в этом ответе . Если я изменю импорт на относительный импорт

from . import b

, я получаю ImportError при попытке импортировать один из модулей:

>>> import pkg.a
Traceback (most recent call last):
  File "", line 1, in 
  File "pkg/a.py", line 1, in 
    from . import b
  File "pkg/b.py", line 1, in 
    from . import a
ImportError: cannot import name a

Почему я получаю эту ошибку? Разве ситуация не такая же, как и выше? (Связано ли это с этим вопросом ?)

Изменить : Этот вопрос не о разработке программного обеспечения. Мне известны способы избежать циклической зависимости, но меня все равно интересует причина ошибки.

35
задан Community 23 May 2017 в 12:31
поделиться