matplotlib.use 在其他导入与 pep8 冲突之前需要。忽略还是修复?

matplotlib.use required before other imports clashes with pep8. Ignore or fix?

我有一个这样开头的 pythonscript:

#!/usr/bin/env python
import matplotlib
matplotlib.use("Agg")

from matplotlib.dates import strpdate2num
import numpy as np
import pylab as pl
from cmath import rect, phase

它就像一个魅力,但我的编辑抱怨:E402 module level import not at top of file [pep8]

如果我将 matplotlib.use("Agg") 向下移动,脚本将无法运行。

我应该忽略这个错误吗?或者有什么办法可以解决这个问题?

编辑: 我知道 PEP8 说这只是一个建议,可能会被忽略,但我希望有一种初始化模块的好方法在不违反 PEP8 准则的情况下,因为我认为我无法让我的编辑器在每个文件的基础上忽略此规则。

EDIT2 : 我正在使用带有 linter-pylama 的 Atom

解决方案取决于正在使用的 linter

在我的例子中,我使用 pylama

linter 的手册建议将 # noqa 添加到包含您希望抑制的错误的行的末尾。

其他 linters 可能有不同的机制。

显然,matplotlib 现在有一个 switch_backend() 函数:

import matplotlib.pyplot
# import other modules
matplotlib.pyplot.switch_backend('Agg')

http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.switch_backend

但是要小心,你运行有爆炸的危险:

Switch the default backend. This feature is experimental, and is only expected to work switching to an image backend. e.g., if you have a bunch of PostScript scripts that you want to run from an interactive ipython session, you may want to switch to the PS backend before running them to avoid having a bunch of GUI windows popup. If you try to interactively switch from one GUI backend to another, you will explode.

Calling this command will close all open windows.

它适用于 matplotlib 1.3.1,但不适用于 1.0.0。

另一个不太好的解决方案,但我临时部署了一个用于 matplotlib 1.0.0 环境的解决方案,是使用包装器模块。

matplotlib_agg.py:

import matplotlib
matplotlib.use('Agg')

在其他文件中:

import matplotlib_agg
# other imports

不确定这是否值得。我宁愿在编辑器中忽略它;但我无法让我使用的那个 (PyCharm) 忽略这一违反 PEP8 E402 的特定行为。