[Kleine Geschichte] Eine sorgfältige Maßnahme, wenn Sie vor dem Import in Python eine Funktion ausführen müssen

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.

Hintergrund

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 ")".

Problem

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.

Gegenmaßnahmen

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

[^ 2]: Zeichnen Sie mit matplotlib ein Diagramm.

Recommended Posts

[Kleine Geschichte] Eine sorgfältige Maßnahme, wenn Sie vor dem Import in Python eine Funktion ausführen müssen
So importieren Sie Dateien in Python an eine beliebige Stelle
[Unterprozess] Wenn Sie ein anderes Python-Programm in Python-Code ausführen möchten
Vorsichtsmaßnahmen beim Beizen einer Funktion in Python
[Python] Dinge, die überprüft werden müssen, wenn in Django ein Unicode-Dekodierungsfehler auftritt
Beachten Sie beim Initialisieren einer Liste in Python
Python Gibt die Funktion an, die ausgeführt werden soll, wenn das Programm endet
Wenn Sie in der for-Anweisung plt.save möchten
So führen Sie einen Befehl mit einem Unterprozess in Python aus
Python-Ertrag verstehen Wenn Sie Ertrag in eine Funktion einfügen, wird dieser in einen Generator geändert
[Django] Memorandum, wenn Sie asynchron kommunizieren möchten [Python3]
[C / C ++] Übergeben Sie den in C / C ++ berechneten Wert an eine Python-Funktion, um den Prozess auszuführen, und verwenden Sie diesen Wert in C / C ++.
Erstellen Sie eine Funktion in Python
Eine Geschichte darüber, wie man einen relativen Pfad in Python angibt.
So geben Sie char * in einer Rückruffunktion mit ctypes in Python zurück
Zu wissen, in welchen Bin ein bestimmter Wert geht, wenn Sie ein Bin-Trennzeichen in ndarray haben
[Python] Wenn Sie Ihr eigenes Paket im oberen Verzeichnis importieren und verwenden möchten
Eine Geschichte über den Versuch, private Variablen in Python zu implementieren.
Wenn Sie einen UNIX-Befehl in Python ausführen möchten
Eine Geschichte, nach der ich süchtig war, als ich in Go nil als Funktionsargument angab
Schreiben Sie ein Skript in Shell und Python, um Sie in Slack zu benachrichtigen, wenn der Vorgang abgeschlossen ist
Eine Geschichte, die nicht funktioniert hat, als ich versucht habe, mich mit dem Python-Anforderungsmodul anzumelden
Wenn Sie mehrere Zeichen in einer Zeichenfolge ersetzen möchten, ohne reguläre Ausdrücke in der Python3-Serie zu verwenden
Was tun, wenn in Python minus Null angezeigt wird?
[Python] Ausführungszeit, wenn eine Funktion in einen Wörterbuchwert eingegeben wird
Zeitzonenspezifikation beim Konvertieren einer Zeichenfolge in einen Datums- / Uhrzeittyp mit Python
[Python] Wenn Sie alle Variablen in einer anderen Datei verwenden möchten
Ich habe eine Funktion zum Laden des Git-Erweiterungsskripts in Python geschrieben
Wenn Sie einer Variablen in Python einen CSV-Export zuweisen möchten
[Python3] Definition eines Dekorators, der die Ausführungszeit einer Funktion misst
Überprüfen Sie, ob Sie in Python eine Verbindung zu einem TCP-Port herstellen können
Vorsichtsmaßnahmen beim Festlegen von Standardwerten für Argumente in Python-Funktionsdefinitionen
Messen Sie die Ausführungszeit von Funktionen in Python
Beim Schreiben eines Programms in Python
[Kleine Geschichte] So speichern Sie Matplotlib-Diagramme in einem Stapel mit Jupyter
Hinweis: [Python3] Konvertiert datetime in eine Zeichenfolge in einem beliebigen Format
So setzen Sie in Python ein Leerzeichen mit halber Breite vor Buchstaben und Zahlen.
Wenn das Modul nicht zugewiesen werden kann, bevor der Aufruf von Module.init () in pytorch ausgegeben wird
So schreiben Sie eine Zeichenfolge, wenn Python mehrere Zeilen enthält
Was passiert, wenn Sie in Python "A, B als C importieren"?
Python: Ich möchte die Verarbeitungszeit einer Funktion genau messen
Wie bekomme ich Stacktrace in Python?
Eine verwirrende Geschichte mit zwei Möglichkeiten, XGBoost in Python + zu implementieren
Erstellen Sie ein Plugin, mit dem Sie in Python nach Registerkarten für Sublime Text 3 suchen können
Was tun, wenn eine Warnung zur Python-Integration in Neovims CheckHealth angezeigt wird?
Das Ausgabe-Timing ist falsch, wenn die Standardausgabe (Fehlerausgabe) in eine Datei in Python konvertiert wird
Eine Geschichte, der ich nach der SFTP-Kommunikation mit Python verfallen war
Ich musste im Unterricht keinen Dekorateur schreiben. Danke Kontextmanager
Eine Funktionsnotiz, die nützlich ist, wenn Sie den Debugger aufrufen möchten, wenn beim Ausführen eines Python-Skripts ein Fehler auftritt.
Zeichnen Sie in Python ein Diagramm einer quadratischen Funktion
Berechnen wir das statistische Problem mit Python
Registrieren Sie Funktionsargumente automatisch in argparse in Python
So löschen Sie einen Taple in einer Liste (Python)