Я пытаюсь импортировать код Python из одного подмодуля в другой, и я получаю сообщение об ошибке, но только когда у меня больше, чем взаимозависимый импорт из пакета.
Насколько я понимаю, это "Циркулярный импорт вполне допустим в Python. Исходя из того, как я хотел бы, чтобы код был организован, мне нужны эти «взаимозависимые» импорты, и, если мне действительно не нужно его менять, я бы хотел, чтобы мой код структурировался в тех же подмодулях, что и сейчас.
Моя структура каталогов / файлов:
./subm1/
./subm1_file.py
./subm2/
./subm2_file.py
./subm_main/
./subm_main_file.py
# subm1_file.py
# -------------
import subm_main.subm_main_file
print(subm_main.subm_main_file.test)
# subm2_file.py
# -------------
import subm_main.subm_main_file
print(subm_main.subm_main_file.test)
# subm_main_file.py
# -------------
import os
import sys
current_path = os.path.dirname(__file__)
sys.path.append(os.path.join(current_path+".."))
import subm1.subm1_file
import subm2.subm2_file
test = "test_variable"
Я работаю $ python subm_main_file.py
, а внутри каталога subm_main
это работаетесли я использую только один модуль, поэтому, если в subm_main_file.py
я закомментирую import subm1.subm1_file
, он запустится и напечатает тестовую переменную, и то же самое, если я закомментирую import subm2.subm2_file
, ошибка всегда возникает при втором импорте. Итак, в коде, который я показываю, ошибка в subm2_file.py
.
Ошибка:
AttributeError: module 'subm_main' has no attribute 'subm_main_file'
Мне кажется очень странным, что это работает один раз, но не во второй раз с обоимиимпортировать заявления без комментариев. Что я могу сделать, чтобы исправить эту ошибку (и, надеюсь, сохранить мой код в его текущем состоянии)?