как создать dockerfile для sanic под poetry?
Хочу запустить API на python с фреймворком sanic под poetry Dockerfile выглядит следующим образом
# Используем базовый образ Python
FROM python:3.12.4
# Установка инструмента для работы с зависимостями Python (Poetry)
RUN curl -sSL https://install.python-poetry.org | python3 -
# Добавление Poetry в PATH
ENV PATH="/root/.local/bin:$PATH"
# Создание директории для приложения и установка зависимостей
WORKDIR /app
# Копируем файлы проекта
COPY pyproject.toml poetry.lock /app/
# Устанавливаем зависимости с помощью Poetry
RUN poetry install --no-root
# Копируем все остальные файлы проекта
COPY . .
# Устанавливаем переменную окружения PYTHONPATH
ENV PYTHONPATH=/app
# Команда для запуска приложения
CMD ["python", "server/server.py"]
добавлял RUN poetry add sanic
но ничего не помогло, по документации sanic нет poetry
выводит ошибку:ModuleNotFoundError: No module named 'sanic'
папка выглядит следующим образом :
project/
├── poetry.lock
├── docker-compose.yml
├── Dockerfile
├── pyproject.toml
└── server/
├── __init__.py
├── server.py
└── search/
├──__init__.py
└── search.py
собирал и docker-compose up --build
и просто image build
проблема в том, что просто не билдит и выводит ошибку указанную выше
Ответы (1 шт):
добавлял
RUN poetry add sanic
Зависимости нужно добавлять не в докер-файле, а до этого. В терминале в директории проекта запустите poetry add sanic
- модуль будет прописан в pyproject.toml
и poetry.lock
, и уже при установке проекта через poetry install
внутри докера установится в виртуальное окружение.
Запускать приложение тоже нужно через poetry
, чтобы оно запускалось в созданном командой poetry install
виртуальном окружении. Вне докер-файла это будет команда
poetry run python server/server.py
Если запускать командой
python server/server.py
- то приложение будет запущено в глобальном окружении, куда не установлены нужные библиотеки, прописанные в pyproject.toml
и poetry.lock
.
Соответственно и в докер-файле в строке запуска приложения нужно запускать через poetry
:
CMD ["poetry", "run", "python", "server/server.py"]
И еще один момент. У вас образ строится на основе python:3.12.4
. В то время как на странице sanic на pypi.org указана поддержка максимум Python 3.11 (см. скриншоты ниже).
Хотя на гихабе вроде бы поддержка 3.12 уже влита: https://github.com/sanic-org/sanic/pull/2870
Но если вдруг то что я выше писал не помогло, пробуйте использовать образ с python 3.11. Но я думаю скорее всего просто забыли добавить информацию про Python 3.12 в setup.py, и на самом деле Python 3.12 поддерживается.