C'est une petite histoire. C'est un cas rare, mais c'est une mesure lorsque Python nécessite l'exécution d'une fonction ou d'une méthode avant l'importation.
Lorsque j'ai installé matplotlib sur Linux et que je l'ai utilisé sur du code Python, j'ai eu l'erreur suivante.
_tkinter.TclError: no display name and no $DISPLAY environment variable
La solution à cette erreur apparaît dès que je recherche, et la réponse semble être que le backend de matplotlib devrait être Agg. (Les détails sur les erreurs et les backends sont omis cette fois)
Il semble y avoir plusieurs façons de faire cela, et la méthode d'écriture de backend: Agg
dans / etc / matplotlibrc [^ 1] et la méthode d'utilisation de matplotlib.use ('Agg')
[^ 2] sont les principales recherches. C'était à la hauteur.
Cette fois, supposons que nous utiliserons matplotlib.use ('Agg')
.
import matplotlib
matplotlib.use('Agg')
from matplotlib import pyplot
def plot(data):
pyplot.plot(data)
Si vous appelez matplotlibu.use ('Agg')
après l'importation comme ci-dessus, cela fonctionne, mais il y a un problème avec cela, et un outil qui change automatiquement l'ordre d'importation ([isort](https: //) pypi.python.org/pypi/isort) etc.) sera réécrit comme suit.
import matplotlib
from matplotlib import pyplot
matplotlib.use('Agg')
def plot(data):
pyplot.plot(data)
Il semble que matplotlib.use ('Agg')
doit être appelé avant d'écrire from matplotlib import pyplot
, ce qui pose un problème lorsque CI vérifie automatiquement le code. Il existe un moyen de l'importer dans la fonction appelante au moment de l'exécution, mais cela devient plus compliqué à mesure que le nombre d'importations et le nombre de fonctions augmentent.
En guise de contre-mesure, elle peut être mise en œuvre comme suit.
try:
import matplotlib
matplotlib.use('Agg')
finally:
from matplotlib import pyplot
def plot(data):
pyplot.plot(data)
Pour le moment, cela peut garantir la commande.
[^ 1]: Comment éviter la récurrence du problème de mousse de matplotlib avec $ DISPLAY non défini