Я буду работать, как я полагаю, ваша проблема связана с asgard, потому что ваш упрощенный пример не работает:
- Вы не можете запустить
main.py
из-за циклического импорта, но я верюэто был main.py
, который вы намеревались запустить (запуск otherfile.py
не вызовет проблемы, с которой, я полагаю, вы столкнетесь). - На самом деле вы никогда ничего не назначаете на
Main.config
.Я не уверен точно, где вы намеревались присвоить ему.
В любом случае, на asgard.py
.
Здесь вы столкнетесь с проблемой модуля __main__
,Когда вы запускаете asgard.py
, его __name__
равно __main__
;что-то, о чем вы можете не знать, это то, что это буквально имя модуля, как оно появляется в sys.modules
- основной модуль - sys.modules['__main__']
, а не sys.modules['asgard']
.Затем, когда вы импортируете library.childcontainer
, он пытается импортировать asgard
.Это ищет sys.modules['asgard']
, который не существует, и поэтому импортирует содержимое asgard.py
в новый объект модуля.
Если бы у вас был другой файл main.py
, который сделал import asgard; asgard.Asgard.initialize()
(игнорируя проблему условного импорта, о которой я упомяну ниже), вы не столкнетесь с этой проблемой, потому что модуль __main__
будет с этим main.py
, а asgard.py
будет импортирован только с именем asgard
.Другое решение, которое будет работать, было бы if __name__ == '__main__': sys.modules['asgard'] = sys.modules['__main__']
.
И, пожалуйста, , пожалуйста, , , пожалуйста, , не , , потяните это if __name__ == '__main__': import ...
.трюк.Это означает, что, например, если вы попытаетесь набрать import asgard; asgard.Asgard.initialize()
, произойдет сбой, сказав, что имя 'os' не определено.Пожалуйста, поместите эти импорта в начало файла, где они принадлежат.