Instalando Pylab (matplotlib) no OpenSuse 13.2

Introdução

Nessa postagem mostrarei como instalar o PyLab (pacote matplotlib) no OpenSuse e também solucionar problemas comuns surgidos no processo.

Instalação

Precisamos instalar 3 pacotes. O python-tk, python-matplotlib e python-matplotlib-tk. Na minha máquina o tamanho total foi de aproximadamente 70MB.

# zypper install python-tk python-matplotlib python-matplotlib-tk

Erro Comum #1

O pacote python-matplotlib-tk é responsável por instalar aquela interface gráfica que aparece quando o  método show() é chamado. Essa interface gráfica recebe o nome de backend e pode ser mudada, como veremos a seguir.

Sem esse pacote instalado o seguinte erro é mostrado [1]:

In [63]: import pylab
—————————————————————————
ImportError Traceback (most recent call last)
in ()
—-> 1 import pylab

/usr/lib64/python2.7/site-packages/pylab.py in ()
—-> 1 from matplotlib.pylab import *
2 import matplotlib.pylab
3 __doc__ = matplotlib.pylab.__doc__

/usr/lib64/python2.7/site-packages/matplotlib/pylab.py in ()
263 from numpy.linalg import *
264
–> 265 from matplotlib.pyplot import *
266
267 # provide the recommended module abbrevs in the pylab namespace

/usr/lib64/python2.7/site-packages/matplotlib/pyplot.py in ()
95
96 from matplotlib.backends import pylab_setup
—> 97 _backend_mod, new_figure_manager, draw_if_interactive, _show = pylab_setup()
98
99 @docstring.copy_dedent(Artist.findobj)

/usr/lib64/python2.7/site-packages/matplotlib/backends/__init__.pyc in pylab_setup()
23 backend_name = ‘matplotlib.backends.%s’%backend_name.lower()
24 backend_mod = __import__(backend_name,
—> 25 globals(),locals(),[backend_name])
26
27 # Things we pull in from all backends

ImportError: No module named backend_tkagg

Logo, se você tem erro semelhante, instale esse pacote.

Erro Comum #2

Esse erro acontece quando tudo está funcionando mas nada é mostrado na tela após um show(). O motivo é que o backend setado por padrão pela instalação não corresponde a um backend gráfico.

Se você está com problema parecido, primeiro verifique qual o backend está setado como padrão:

$ python -c 'import matplotlib; import matplotlib.pyplot; print(matplotlib.backends.backend)'

Se a saída for:

Agg

então o backend Agg está sendo usado. Esse backend é não interativo por isso nada é mostrado na tela após um show(), embora ele ainda funcione usando savefig(...) [2].

Temos que mudar esse backend e isso é feito alterando um arquivo de configuração. Para localizar esse arquivo, digite [3]:

$ python -c 'import matplotlib; print(matplotlib.matplotlib_fname())'

A saída em minha máquina foi:

/usr/lib/python2.7/site-packages/matplotlib/mpl-data/matplotlibrc

Vamos abrir esse arquivo e localizar a linha que começa com backend:

# vim /usr/lib/python2.7/site-packages/matplotlib/mpl-data/matplotlibrc
...
backend: Agg

Troque backend: Agg por backend: TkAgg. Salve o arquivo e teste seu script novamente e veja se a interface apareceu.

Bônus: Mudando o backend

Há vários backends disponíveis. Digite o seguinte comando para ver uma lista deles [3]:

$ python -c 'import matplotlib.rcsetup as rcsetup; print(rcsetup.all_backends)'
[u'GTK', u'GTKAgg', u'GTKCairo', u'MacOSX', u'Qt4Agg', u'Qt5Agg', u'TkAgg', u'WX', u'WXAgg', u'CocoaAgg', u'GTK3Cairo', u'GTK3Agg', u'WebAgg', u'nbAgg', u'agg', u'cairo', u'emf', u'gdk', u'pdf', u'pgf', u'ps', u'svg', u'template']

Alguns deles não terão o pacote equivalente instalado. Em minha máquina, embora o GTKAgg estivesse listado, o seu backend não estava disponível.

Para testar a mudança de backend, vou instalar o pacote python-matplotlib-gtk3:

# zypper install python-matplotlib-gtk3

O seguinte backend foi instalado: Gtk3Agg (basta conferir usando o comando de listagem).

Feito isso, temos que alterar o arquivo de configuração (no meu caso o /usr/lib/python2.7/site-packages/matplotlib/mpl-data/matplotlibrc) trocando a linha para backend: Gtk3Agg

Depois é só rodar seu script teste e verificar as diferenças na modelagem da janela e também nos ícones.

Referências

[1] Problems with pylab and ipython on openSUSE – ImportError by mattos (Acessado em: Dezembro/2014)
http://www.mattos.eng.br/2013/10/01/problems-with-pylab-and-ipython-on-opensuse-importerror/

[2] Why matplotlib does not plot? by stackoverflow (Acessado em: Dezembro/2014)
http://stackoverflow.com/questions/14558843/why-matplotlib-does-not-plot

[3] matplotlib does not show my drawings although I call pyplot.show() by stackoverflow (Acessado em: Dezembro/2014)
http://stackoverflow.com/questions/7534453/matplotlib-does-not-show-my-drawings-although-i-call-pyplot-show

2 pensamentos sobre “Instalando Pylab (matplotlib) no OpenSuse 13.2

Deixe um comentário