essayer ça ?
import matplotlib,os
r = os.system('python -c "import matplotlib.pyplot as plt;plt.figure()"')
if r != 0:
matplotlib.use('Agg')
import matplotlib.pyplot as plt
fig = plt.figure()
fig.savefig('myfig.png')
else:
import matplotlib.pyplot as plt
fig = plt.figure()
plt.show()
Vous pouvez détecter directement si vous avez un affichage avec le module OS en python. Dans mon cas c'est
>>> import os
>>> os.environ["DISPLAY"]
':0.0'
Le code ci-dessous fonctionne pour moi sous Linux et Windows (où il suppose qu'il y a un périphérique d'affichage) :
import os
import matplotlib
if os.name == 'posix' and "DISPLAY" not in os.environ:
matplotlib.use('Agg')
Voir https://stackoverflow.com/a/1325587/896111.
Notez que la ligne matplotlib.use('Agg')
doit apparaître après la première importation de matplotlib
(sinon vous obtiendrez une erreur).