Модуль не найден в контейнере Docker

#python #docker #dockerfile

Вопрос:

Я знаю, что об этом есть несколько постов, но я не совсем понял.

У меня есть следующая структура проекта:

 engine
--alpha-api
----app.py
----__init__.py
--api_utils
----utils.py
----__init__.py
--beta_api
 

и у меня есть следующий файл Dockefile:

 FROM public.ecr.aws/lambda/python:3.8

COPY . ${LAMBDA_TASK_ROOT}
WORKDIR ${LAMBDA_TASK_ROOT}

RUN pip install -r ./alpha-api/requirements.txt --target ./alpha-api
 

Файл Dockerfile находится под альфа-api. Это не может быть изменено, так как у меня есть две разные лямбды в одном репо.
Когда я запускаю сборку docker в контексте каталога движка, я сохраняю контекст и получаю ту же структуру проекта. ( docker build -f ./alpha-api/Dockerfile -t alpha-api . )

Однако, когда я запускаю контейнер и вызываю ./alpha-api/app.py Я получаю следующую ошибку:

 Traceback (most recent call last):
  File "app.py", line 9, in <module>
    from api_utils.utils import DateStringFormat
ModuleNotFoundError: No module named 'api_utils'

 

Вы знаете, почему он не распознает api_utils?

Ответ №1:

При запуске python ./alpha-api/app.py Python будет содержать только все файлы ./alpha-api в своем пути.

Установка PYTHONPATH значения ./ (или ${LAMBDA_TASK_ROOT} ) перед запуском файла может помочь.

Ответ №2:

Для того, чтобы python python понял, что папка на самом деле является модулем python, она должна содержать __init__.py файл. Попробуйте добавить пустую __init__.py папку в свою папку api_utils.

Комментарии:

1. На самом деле у него есть один. Я отредактирую структуру проекта