JOHN_16
Фев. 18, 2015 14:38:32
Ashe
суть в том что Python при импортировании ищет файлы в достаточно определенных директориях, а именно тех что значатся в sys.path. Вы пытаетесь находясь в пакете core модуле main сделать импорт другого модуля в пакете который иерархически находится выше. Т.е. Питон в данном случае просто не знает где искать то что вы хотите. Он начинает искать пакет app в текущей директории (а это core), затем в переменной окружения, затем в стандартной библиотеке. Но он нигде не найдет его.
Как вариант можно в sys.path в месте импорта добавить относительный путь до нужного пакета, это обходное решение. А прямое решение видимо сена архитектуры, потому что идеологически , скорее всего, не верно что модуль в одном пакете пытается что то импортировать из модуля другого пакета. Обычно в проекте есть некая общая точка - вершина иерархии проекта, вот там должен быть некий main.py, который импортирует любые дочерние модули.
JOHN_16
Фев. 18, 2015 14:42:38
Ashe Начиная с 2.7 кажется версии есть модуль importlib, он тоже занимается импортом, правда достаточно специфичен и я не могу сказать сейчас точно подойдет ли он вам или нет.
py.user.next
Фев. 18, 2015 14:55:19
JOHN_16
вершина иерархии проекта, вот там должен быть некий main.py, который импортирует любые дочерние модули.
Вот так лучше сделать. Тогда сверху она сможет и импортировать, и совмещать объекты с разных глубин иерархии.