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

y0u0uwnf  于 2023-01-26  发布在  其他
关注(0)|答案(3)|浏览(144)

我有一个Python脚本,它的开头是这样的:

#!/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的准则,因为我不认为我可以让我的编辑器忽略这个规则的每一个文件的基础上。
(我使用Atom和棉绒幽门。)

iszxjhcz

iszxjhcz1#

显然,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上就不行了。

iq3niunx

iq3niunx2#

另一个不太好的解决方案是使用一个 Package 器模块,但我暂时将其部署到matplotlib 1.0.0环境中。
matplotlib_agg.py中:

import matplotlib
matplotlib.use('Agg')

在其他文件中:

import matplotlib_agg
# other imports

不确定这是否值得,我宁愿在编辑器中忽略它;但是我无法让我使用的那个(PyCharm)忽略PEP 8 E402的这一个特定冲突。

vfh0ocws

vfh0ocws3#

解决方案取决于所使用的linter
在我的例子中,我使用pylama
这个linter的手册建议将# noqa添加到包含您希望抑制的错误的行的末尾。
其它短绒可具有不同的机理。

相关问题