Найти - Пользователи
Полная версия: Импортирование модулей
Начало » Python для новичков » Импортирование модулей
1 2
py.user.next
Ashe
не работает
Где ошибка возникает?
Ashe
Traceback (most recent call last):
  File "example/init.py", line 6, in <module>
    from master.app.core import main
  File "/home/pi/example/master/app/core/main.py", line 11, in <module>
    from app import logger
ImportError: No module named app

Traceback (most recent call last):
  File "example/init.py", line 6, in <module>
    from master.app.core import main
  File "/home/pi/example/master/app/core/main.py", line 11, in <module>
    from app.utils import logger
ImportError: No module named app.utils

Traceback (most recent call last):
  File "example/init.py", line 6, in <module>
    from master.app.core import main
  File "/home/pi/example/master/app/core/main.py", line 11, in <module>
    from app.utils.logger import logger
ImportError: No module named app.utils.logger
JOHN_16
Ashe
суть в том что Python при импортировании ищет файлы в достаточно определенных директориях, а именно тех что значатся в sys.path. Вы пытаетесь находясь в пакете core модуле main сделать импорт другого модуля в пакете который иерархически находится выше. Т.е. Питон в данном случае просто не знает где искать то что вы хотите. Он начинает искать пакет app в текущей директории (а это core), затем в переменной окружения, затем в стандартной библиотеке. Но он нигде не найдет его.
Как вариант можно в sys.path в месте импорта добавить относительный путь до нужного пакета, это обходное решение. А прямое решение видимо сена архитектуры, потому что идеологически , скорее всего, не верно что модуль в одном пакете пытается что то импортировать из модуля другого пакета. Обычно в проекте есть некая общая точка - вершина иерархии проекта, вот там должен быть некий main.py, который импортирует любые дочерние модули.
JOHN_16
Ashe Начиная с 2.7 кажется версии есть модуль importlib, он тоже занимается импортом, правда достаточно специфичен и я не могу сказать сейчас точно подойдет ли он вам или нет.
py.user.next
JOHN_16
вершина иерархии проекта, вот там должен быть некий main.py, который импортирует любые дочерние модули.
Вот так лучше сделать. Тогда сверху она сможет и импортировать, и совмещать объекты с разных глубин иерархии.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB