Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 18, 2015 14:02:26

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10015
Репутация: +  857  -
Профиль   Отправить e-mail  

Импортирование модулей

Ashe
не работает
Где ошибка возникает?



Офлайн

#2 Фев. 18, 2015 14:13:28

Ashe
Зарегистрирован: 2014-12-04
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Импортирование модулей

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

Офлайн

#3 Фев. 18, 2015 14:38:32

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Импортирование модулей

Ashe
суть в том что Python при импортировании ищет файлы в достаточно определенных директориях, а именно тех что значатся в sys.path. Вы пытаетесь находясь в пакете core модуле main сделать импорт другого модуля в пакете который иерархически находится выше. Т.е. Питон в данном случае просто не знает где искать то что вы хотите. Он начинает искать пакет app в текущей директории (а это core), затем в переменной окружения, затем в стандартной библиотеке. Но он нигде не найдет его.
Как вариант можно в sys.path в месте импорта добавить относительный путь до нужного пакета, это обходное решение. А прямое решение видимо сена архитектуры, потому что идеологически , скорее всего, не верно что модуль в одном пакете пытается что то импортировать из модуля другого пакета. Обычно в проекте есть некая общая точка - вершина иерархии проекта, вот там должен быть некий main.py, который импортирует любые дочерние модули.



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#4 Фев. 18, 2015 14:42:38

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Импортирование модулей

Ashe Начиная с 2.7 кажется версии есть модуль importlib, он тоже занимается импортом, правда достаточно специфичен и я не могу сказать сейчас точно подойдет ли он вам или нет.



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#5 Фев. 18, 2015 14:55:19

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10015
Репутация: +  857  -
Профиль   Отправить e-mail  

Импортирование модулей

JOHN_16
вершина иерархии проекта, вот там должен быть некий main.py, который импортирует любые дочерние модули.
Вот так лучше сделать. Тогда сверху она сможет и импортировать, и совмещать объекты с разных глубин иерархии.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version