#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. На самом деле у него есть один. Я отредактирую структуру проекта