невозможно импортировать файл из приложения в другое

У меня есть проект django с такой структурой:

основной_проект

---- основной_проект

‹------библиотеки

‹‹---------exceptions.py

----проект_а

----проект_б

В views.py из project_a я пытаюсь импортировать папку с именем libs из main_project и файл из libs вызывается exceptions.py, но я получаю сообщение об ошибке
ImportError: No module named libs.exceptions

Мой код:

from main_project.libs.exceptions import (
    APIException400,
    APIException405,
    APIException403,
    exception_handler_dispatcher,
)

Может кто-нибудь сказать мне, что мне здесь не хватает? Со ссылкой на ответ https://stackoverflow.com/a/31407131/5080347 я даже пытался:

from main_project.main_project.libs.exceptions import (
        APIException400,
        APIException405,
        APIException403,
        exception_handler_dispatcher,
    )

но не работает.


person the_unknown_spirit    schedule 18.05.2016    source источник
comment
Содержит ли libs файл __init__.py?   -  person DhiaTN    schedule 18.05.2016
comment
Добавлен файл __init.py__, который все еще не работает   -  person the_unknown_spirit    schedule 18.05.2016
comment
Нет, это __init__.py, а не __init.py, без файла python рассматривайте библиотеки как обычную папку, а не пакет.   -  person DhiaTN    schedule 18.05.2016


Ответы (2)


Кажется, вы забыли добавить __init__.py в каталог libs.

__init__.py используется для инициализации пакетов Python. Ознакомьтесь с документацией, чтобы лучше понять, как все работает.

Ваша структура должна выглядеть следующим образом:

    project/
    |   
    |-- __init__.py
    |   
    |-- module_a/
    |   |-- __init__.py
    |   |
    |   |-- file1.py
    |   |
    |   |-- file2.py
    |
    |-- module_b/
    |   |
    |   |-- __init__.py
    |   |
    |   |-- file1.py
    |   |
    |   |-- submodule/
    |   |   |--__init__.py
    |   |   |
    |   |   |-- file1.py
person DhiaTN    schedule 18.05.2016

Когда вы импортируете с помощью from main_project.libs.exceptions, python ожидает, что main_project — это пакет, а libs и exceptions — подмодули. Таким образом, в этих каталогах должен быть файл с именем __init__.py. Файлы init.py необходимы для того, чтобы Python рассматривал каталоги как содержащие пакеты. Дополнительную информацию см. здесь.

person Tarun Behal    schedule 18.05.2016