Python допускает циклические зависимости, но очень редко это полезно.
В общем, два зависимых друг от друга пакета не считаются циклической зависимостью, а только два модуля.Пример
moduleB.py
from moduleA import B
class C:
# definition
B.start()
moduleA.py
from moduleB import C
class B:
@staticmethod
def start():
# remaining definitions
d = C()
Однако циклические зависимости, подобные упомянутой здесь, просто не будут работать - импорт по умолчаниюмеханизм не допустит этого, и вы получите сообщение об ошибке, иначе импорт будет вызывать друг друга до тех пор, пока вы не столкнетесь с переполнением стека, если вы не реализуете ловушки импорта для его решения.
Если packageA.moduleA импортирует что-тоиз packageB.moduleA, и packageB.moduleB импортирует из packageA.moduleA, что разрешено.