Как импортировать пакет в модуль ⇐ Python

Программы на Python
Anonymous
Как импортировать пакет в модуль

Сообщение Anonymous »

Я новичок в Python и пытаюсь структурировать свое приложение Python.

При следующей структуре каталогов:

Код: Выделить всё

📦app
┣ 📂lexer
┃ ┣ 📂token
┃ ┃ ┣ 📜token.py
┃ ┃ ┣ 📜type.py
┃ ┃ ┗ 📜__init__.py
┃ ┗ 📜__init__.py
┣ 📂test
┃ ┣ 📂lexer
┃ ┃ ┣ 📂token
┃ ┃ ┃ ┣ 📜test_token.py
┃ ┃ ┃ ┗ 📜__init__.py
┃ ┃ ┗ 📜__init__.py
┃ ┣ 📜test_app.py
┃ ┗ 📜__init__.py
┗ 📜app.py
Сейчас приложение запускается с помощью следующей команды:

Код: Выделить всё

pyhton -m app
Когда я пытаюсь выполнить приложение, используя

Код: Выделить всё

python -m .\app.py
Возникает следующая ошибка:

Код: Выделить всё

Relative module names not supported.
Модульные тесты выполняются с использованием:

Код: Выделить всё

python -m unittest
Это работает нормально и без проблем.
Теперь я пытаюсь использовать импорт файла токена/type.py в приложении. Файл .py.

Содержимое этого файла:

Код: Выделить всё

from enum import Enum, unique

@unique
class Type(Enum):
UNKNOWN = 1
EOF     = 2
В файл app.py добавлен следующий оператор импорта:

Код: Выделить всё

from app.lexer.token.type import Type
Запуск приложения прямо сейчас приводит к следующей ошибке:

Код: Выделить всё

Traceback (most recent call last):
File "C:\Python38\lib\runpy.py", line 193, in _run_module_as_main
return _run_code(code, main_globals, None,
File "C:\Python38\lib\runpy.py", line 86, in _run_code
exec(code, run_globals)
File "C:\DEV\DEMO.ONE\app\app.py", line 17, in 
from app.lexer.token.type import Type
File "C:\DEV\DEMO.ONE\app\app.py", line 17, in 
from app.lexer.token.type import Type
ModuleNotFoundError: No module named 'app.lexer'; 'app' is not a package
Есть идеи, как это можно исправить?

Подробнее здесь: https://stackoverflow.com/questions/613 ... -in-module

Вернуться в «Python»