Чтобы добавить к тому, что сказали другие, еще один хороший способ избежать проблем кругового импорта - это избегать from module import stuff
.
Если вы просто сделаете стандартный import module
в верхней части каждого скрипта и напишите module.stuff
в своих функциях, то к тому времени, когда эти функции запустятся, импорт будет завершен, и все члены модуля будут доступны.
Тогда вам также не придется беспокоиться о ситуациях, когда некоторые модули могут обновлять / изменять одного из своих участников (или его непонятно исправляет непослушная третья сторона). Если вы импортировали from
модуль, у вас все еще была бы старая, устаревшая копия участника.
Лично я использую from
- import
только для простых, не зависимых от членов, к которым я, скорее всего, буду ссылаться: в частности, на символические константы.