Es ist eine kleine Geschichte. Dies ist ein seltener Fall, aber es ist eine Maßnahme, wenn Python vor dem Import die Ausführung einer Funktion oder Methode erfordert.
Als ich matplotlib unter Linux installiert und für Python-Code verwendet habe, wurde der folgende Fehler angezeigt.
_tkinter.TclError: no display name and no $DISPLAY environment variable
Die Lösung für diesen Fehler wird gefunden, sobald ich suche, und die Antwort scheint zu sein, dass das Backend von matplotlib Agg sein sollte. (Details zu Fehlern und Backends werden diesmal weggelassen)
Es scheint verschiedene Möglichkeiten zu geben, dies zu tun, und die Methode zum Schreiben von "Backend: Agg" in / etc / matplotlibrc [^ 1] und die Methode zum Verwenden von "matplotlib.use (" Agg ")" [^ 2] sind die häufigsten Suchanfragen. Es lag an.
Nehmen wir dieses Mal an, wir verwenden "matplotlib.use (" Agg ")".
import matplotlib
matplotlib.use('Agg')
from matplotlib import pyplot
def plot(data):
pyplot.plot(data)
Wenn Sie nach dem Import wie oben beschrieben matplotlibu.use ('Agg')
aufrufen, funktioniert dies, aber es gibt ein Problem damit und ein Tool, das die Importreihenfolge automatisch ändert ([isort](https: //) pypi.python.org/pypi/isort) usw.) wird wie folgt umgeschrieben.
import matplotlib
from matplotlib import pyplot
matplotlib.use('Agg')
def plot(data):
pyplot.plot(data)
Es scheint, dass "matplotlib.use (" Agg ")" aufgerufen werden muss, bevor "from matplotlib import pyplot" geschrieben wird. Dies ist ein Problem, wenn CI den Code automatisch überprüft. Es gibt eine Möglichkeit, es zur Laufzeit in die aufrufende Funktion zu importieren, aber es wird komplizierter, wenn die Anzahl der Importe und die Anzahl der Funktionen zunimmt.
Als Gegenmaßnahme kann es wie folgt implementiert werden.
try:
import matplotlib
matplotlib.use('Agg')
finally:
from matplotlib import pyplot
def plot(data):
pyplot.plot(data)
Dies kann vorerst die Bestellung garantieren.
[^ 1]: So verhindern Sie das Wiederauftreten eines Matplotlib-Moos-Problems mit undefiniertem $ DISPLAY