как создать 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 шт):

Автор решения: insolor

добавлял 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 поддерживается.

введите сюда описание изображения

введите сюда описание изображения

→ Ссылка