Utiliser matplotlib sur le serveur Ubuntu 14.04 sans tête

J’ai un Ubuntu 14.04 Server sans serveur que je connecte à distance en utilisant SSH. Je veux utiliser matplotlib et faire apparaître des tracés sur le client ssh. Par exemple, je connecterais en utilisant:

ssh -X [email protected] 

Et puis, depuis une console Python, je veux que cela produise un tracé dans une fenêtre:

 import matplotlib.pyplot as plt plt.plot(range(10)) plt.show() 

J’ai installé matplotlib dans mon virtualenv, et j’ai couru sudo apt-get install python-gtk2 , mais le tracé n’apparaît toujours pas. Je suppose que je manque beaucoup de paquets. Qu’est-ce qu’un ensemble assez minimal de paquets liés à X que je pourrais installer pour que cela fonctionne? Je ne veux PAS installer ubuntu-desktop .

Je l’ai fait fonctionner sur le serveur Ubuntu 14.04.1, mais c’était douloureux! La partie délicate est définitivement virtualenv. J’ai finalement eu de la chance en utilisant le backend Qt4, que je n’ai pu installer que via le package Ubuntu et que je devais ensuite associer à mon virtualenv. Alors voici le processus pas à pas …

Installez d’abord les pré-requêtes et piratez PyQt4 dans votre virtualenv:

 $ sudo apt-get install xauth x11-apps python-qt4 $ ln -s /usr/lib/python2.7/dist-packages/PyQt4 /path/to/myvenv/lib/python2.7/PyQt4 

Maintenant, téléchargez et installez manuellement SIP ( http://www.riverbankcomputing.com/software/sip/intro ) avec votre venv activé, comme suit:

 $ tar xzf sip-4.16.4.tar.gz $ cd sip-4.16.4 $ python configure.py $ make $ sudo make install 

Ensuite, téléchargez l’archive source de matplotlib et modifiez la configuration pour la forcer à installer Qt4 backend:

 $ tar xzf matplotlib-1.4.2.tar.gz $ cp matplotlib-1.4.2/setup.cfg.template matplotlib-1.4.2/setup.cfg 

Maintenant, éditez setup.cfg près de la ligne 68 pour lire:

 qt4agg = True 

Matplotlib va ​​maintenant s’installer correctement dans votre venv:

 $ pip install -e matplotlib-1.4.2/ 

Maintenant, vous pouvez SSH en utilisant le drapeau -X et les tracés se chargeront à distance!