【问题标题】:Python2 QT BindingsPython2 QT 绑定
【发布时间】:2020-06-21 15:20:40
【问题描述】:

我在 docker 容器中运行一些 python 代码,定义为:

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

【问题讨论】:

  • 检查thisthis是否有通过pep8的问题

标签: python docker matplotlib


【解决方案1】:

由于 matplotlib API 特定,无法轻松实现您想要的。这里是相关的doc

如果你使用 use() 函数,这必须在导入 matplotlib.pyplot 之前完成。在导入 pyplot 后调用 use() 将无效。如果用户想要使用不同的后端,使用 use() 将需要更改您的代码。因此,除非绝对必要,否则应避免显式调用 use()。

因此,对于这种特殊情况,您可以尝试抑制 PEP8,这是可能的。

【讨论】:

    猜你喜欢
    • 2021-09-16
    • 1970-01-01
    • 1970-01-01
    • 2011-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    相关资源
    最近更新 更多