我有一个像这样开始的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
答案 0 :(得分:8)
显然,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
但要注意,你冒着爆炸的风险:
切换默认后端。此功能仅为实验性功能 期望切换到图像后端。例如,如果你有 要从交互式运行的一堆PostScript脚本 在ipython会话中,您可能希望之前切换到PS后端 运行它们以避免弹出一堆GUI窗口。如果你试试 要以交互方式从一个GUI后端切换到另一个GUI后端 爆炸。
调用此命令将关闭所有打开的窗口。
对matplotlib
1.3.1而言,它很适合我,但不适用于1.0.0。
答案 1 :(得分:3)
解决方案取决于正在使用的linter
。
就我而言,我正在使用pylama
此linter
的手册建议将# noqa
添加到包含您要抑制的错误的行的末尾。
其他短绒可能有不同的机制。
答案 2 :(得分:1)
另一个不太好的解决方案,但是我为matplotlib
1.0.0的环境暂时部署的解决方案是使用包装模块。
在matplotlib_agg.py
:
import matplotlib
matplotlib.use('Agg')
在其他档案中:
import matplotlib_agg
# other imports
不确定这是否值得。我宁愿在编辑器中忽略它;但我无法得到我使用的那个(PyCharm)忽略这一特定违反PEP8 E402的行为。