Задать вопрос
@alekseiami

Docker + Python + PyQt5. Как бороться с ошибкой ImportError: Cannot load backend 'Qt5Agg'?

Есть несложный проект на Python 3.9 с использованием PyQt5 и matplotlib.
Если я запускаю его на Windows 10 в MS Visual Code, то он открывается и корректно работает.
Но если я пакую этот проект в контейнер Docker, то при запуске контейнера возникает следующая ошибка:
ImportError: Cannot load backend 'Qt5Agg' which requires the 'qt' interactive framework, as 'headless' is currently running


Первые строки кода:

import sys
import matplotlib
matplotlib.use("Qt5Agg")


Как тут быть?

Dockerfile прилагаю, он был создан автоматически через docker init.

spoiler
# syntax=docker/dockerfile:1

# Comments are provided throughout this file to help you get started.
# If you need more help, visit the Dockerfile reference guide at
# https://docs.docker.com/go/dockerfile-reference/

# Want to help us make this template better? Share your feedback here: https://forms.gle/ybq9Krt8jtBL3iCk7

ARG PYTHON_VERSION=3.9
FROM python:${PYTHON_VERSION}-slim as base

# Prevents Python from writing pyc files.
ENV PYTHONDONTWRITEBYTECODE=1

RUN apt-get update && apt-get install ffmpeg libsm6 libxext6  -y

# Keeps Python from buffering stdout and stderr to avoid situations where
# the application crashes without emitting any logs due to buffering.
ENV PYTHONUNBUFFERED=1

WORKDIR /app

# Create a non-privileged user that the app will run under.
# See https://docs.docker.com/go/dockerfile-user-best-practices/
ARG UID=10001
RUN adduser \
    --disabled-password \
    --gecos "" \
    --home "/nonexistent" \
    --shell "/sbin/nologin" \
    --no-create-home \
    --uid "${UID}" \
    appuser

# Download dependencies as a separate step to take advantage of Docker's caching.
# Leverage a cache mount to /root/.cache/pip to speed up subsequent builds.
# Leverage a bind mount to requirements.txt to avoid having to copy them into
# into this layer.
RUN --mount=type=cache,target=/root/.cache/pip \
    --mount=type=bind,source=requirements.txt,target=requirements.txt \
    python -m pip install -r requirements.txt

# Switch to the non-privileged user to run the application.
USER appuser

# Copy the source code into the container.
COPY . .

# Expose the port that the application listens on.
EXPOSE 8000

# Run the application.
CMD python Interface.py


Файл requirements.txt

spoiler
matplotlib==3.5.1
PyQt5==5.15.4
numpy==1.22.3
  • Вопрос задан
  • 183 просмотра
Подписаться 1 Простой 3 комментария
Пригласить эксперта
Ответы на вопрос 1
soulilya
@soulilya
Культурный, утонченный и изысканный.
Ну тык в докере нет GUI + в винде нет GUI для командной строки linux (вроде ее отдельно можно поставить). Куда инфу ему выводить? На linux делается с помощью X11 server. В винде тебе придется разобраться самому. Пример во тут они приводят:
https://code.qt.io/cgit/qbs/qbs.git/tree/docker/wi...
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы