Python2 QT Bindings - PullRequest
       0

Python2 QT Bindings

0 голосов
/ 09 марта 2020

Я выполняю некоторый код python в контейнере docker, определяемый как:

FROM continuumio/anaconda2:5.3.0
USER root
RUN apt-get install git
ENV AWS_DEFAULT_REGION us-east-2

# Copying code in container
RUN mkdir /warburg-investigation

COPY . /warburg-investigation
RUN apt-get update

# Installing necessary packages
RUN pip install panaxea

# Launching
ENV PYTHONPATH "${PYTHONPATH}:/warburg-investigation"
RUN cd warburg-investigation; python Main.py --pysparse

В одном из моих сценариев импорт matplotlib как:

import matplotlib
import matplotlib.pyplot as plt
matplotlib.use("Agg")
plt.switch_backend("agg")

Причины :

File "/opt/conda/lib/python2.7/site-packages/matplotlib/backends/qt_compat.py", line 158, in <module>

    raise ImportError("Failed to import any qt binding")

ImportError: Failed to import any qt binding

Принимая во внимание как:

import matplotlib
matplotlib.use("Agg")
import matplotlib.pyplot as plt
plt.switch_backend("agg")

Любой совет, почему? Последний работает, но не пройдет проверку PEP8, поскольку он вызывает:

E402 module level import not at top of file

1 Ответ

0 голосов
/ 09 марта 2020

Невозможно легко достичь того, чего вы хотите, из-за API-интерфейса matplotlib c. Здесь относится do c:

Если вы используете функцию use (), это необходимо сделать перед импортом matplotlib.pyplot. Вызов use () после импорта pyplot не будет иметь никакого эффекта. Использование use () потребует изменений в вашем коде, если пользователи захотят использовать другой бэкэнд. Следовательно, вам следует избегать явного вызова use (), если это не является абсолютно необходимым.

Итак, вы можете попытаться подавить PEP8 для этого конкретного случая, на самом деле это возможно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...