Ошибка с более чем одним зависимым / циклическим импортом Python - PullRequest
0 голосов
/ 10 октября 2019

Я пытаюсь импортировать код 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' 

Мне кажется очень странным, что это работает один раз, но не во второй раз с обоимиимпортировать заявления без комментариев. Что я могу сделать, чтобы исправить эту ошибку (и, надеюсь, сохранить мой код в его текущем состоянии)?

1 Ответ

0 голосов
/ 11 октября 2019

Я пока не могу комментировать сообщение, но, возможно, ваша проблема в том, что вам нужно поместить файл init .py в корень и подкаталоги, если вы хотите сохранить структуру папок / кодов без изменений. ..

...