J'essaie d'exécuter un code très simple qui génère un fichier .png dans un cluster. Voici le code:
import matplotlib.pyplot as plt
import numpy as np
x = np.random.randn(60)
y = np.random.randn(60)
plt.scatter(x, y, s=20)
out_png = 'path/to/store/out_file.png'
plt.savefig(out_png, dpi=150)
Si je lance ce code avec la commande python simple_code.py
dans mon système sur lequel matplotlib 1.2.1 est installé, je reçois l’avertissement:
Unable to load library icui18n "Cannot load library icui18n:
L'image .png est toujours produite, donc je n'ai pas de problème ici. Mais si j'utilise la même commande et le même code dans un cluster sur lequel matplotlib 1.3.0 est installé, il échoue avec l'erreur suivante:
Traceback (most recent call last):
File "simple_code.py", line 33, in <module>
plt.scatter(x, y, s=20)
File "/usr/lib/pymodules/python2.7/matplotlib/pyplot.py", line 3078, in scatter
ax = gca()
File "/usr/lib/pymodules/python2.7/matplotlib/pyplot.py", line 803, in gca
ax = gcf().gca(**kwargs)
File "/usr/lib/pymodules/python2.7/matplotlib/pyplot.py", line 450, in gcf
return figure()
File "/usr/lib/pymodules/python2.7/matplotlib/pyplot.py", line 423, in figure
**kwargs)
File "/usr/lib/pymodules/python2.7/matplotlib/backends/backend_tkagg.py", line 79, in new_figure_manager
return new_figure_manager_given_figure(num, figure)
File "/usr/lib/pymodules/python2.7/matplotlib/backends/backend_tkagg.py", line 87, in new_figure_manager_given_figure
window = Tk.Tk()
File "/usr/lib/python2.7/lib-tk/Tkinter.py", line 1712, in __init__
self.tk = _tkinter.create(screenName, baseName, className, interactive, wantobjects, useTk, sync, use)
_tkinter.TclError: no display name and no $DISPLAY environment variable
Que se passe-t-il ici?
Ajoutez, c'est le script que j'utilise pour me connecter au cluster:
#!/usr/bin/expect
set login "user"
set addr "address1"
set addr2 "address2"
set pw "password"
spawn ssh -X $login@$addr
expect "$login@$addr\'s password:"
send "$pw\r"
expect "$login@Host:"
send "ssh -X $addr2\r"
expect "$login@$addr\'s password:"
send "$pw\r"
interact
Votre problème est dans la commande ssh. Ce que vous devez faire est de l'écrire de cette façon:
ssh -X "your_login"