Matplotlib y libpng problemas con ipython notebook

Estaba tratando de usar el portátil ipython. Instalé todas las librerías de dependencias. Sin embargo, no puedo usar la opción “–pylab = inline” al iniciar ipython o la función “savefig” en la consola Ipython. Cuando intenté hacer cualquiera de ellos, se devolvió un mensaje de error “RuntimeError: No se pudo crear la estructura de escritura” resultante de la ejecución de matplotlib. Además, una advertencia de la solicitud de notebookApp decía “advertencia de libpng: aplicación creada con libpng-1.2.41 pero que se ejecuta con 1.5.13″.

Sin embargo, instalé la versión más reciente de libpng (1.5.13), desinstalé matplotlib con pip y reinstalé matplotlib con pip install (y durante el proceso de comstackción, puedo ver que libpng1.5.13 se usa para la construcción de matplotlib).

La configuración de mi sistema es Mac OS X10.6, python2.7. ¿Alguien tiene experiencia similar o alguna sugerencia?

Aquí están los errores de rastreo:

[] --------------------------------------------------------------------------- RuntimeError Traceback (most recent call last) /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/IPython/zmq/pylab/backend_inline.pyc in show(close) 100 try: 101 for figure_manager in Gcf.get_all_fig_managers(): --> 102 send_figure(figure_manager.canvas.figure) 103 finally: 104 show._to_draw = [] /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/IPython/zmq/pylab/backend_inline.pyc in send_figure(fig) 209 """ 210 fmt = InlineBackend.instance().figure_format --> 211 data = print_figure(fig, fmt) 212 # print_figure will return None if there's nothing to draw: 213 if data is None: /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/IPython/core/pylabtools.pyc in print_figure(fig, fmt) 102 try: 103 bytes_io = BytesIO() --> 104 fig.canvas.print_figure(bytes_io, format=fmt, bbox_inches='tight') 105 data = bytes_io.getvalue() 106 finally: /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/backend_bases.pyc in print_figure(self, filename, dpi, facecolor, edgecolor, orientation, format, **kwargs) 2050 orientation=orientation, 2051 dryrun=True, -> 2052 **kwargs) 2053 renderer = self.figure._cachedRenderer 2054 bbox_inches = self.figure.get_tightbbox(renderer) /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/backends/backend_agg.pyc in print_png(self, filename_or_obj, *args, **kwargs) 501 _png.write_png(renderer._renderer.buffer_rgba(), 502 renderer.width, renderer.height, --> 503 filename_or_obj, self.figure.dpi) 504 finally: 505 if close: RuntimeError: Could not create write struct 

Muchas gracias,

Jie

Tuve este mismo problema en OS X Mavericks con libpng instalado a través de homebrew y también XQuartz instalado. Resultó que matplotlib estaba encontrando la versión más antigua de libpng de XQuartz al comstackr, pero encontrando la más reciente libpng de homebrew en tiempo de ejecución.

La mejor solución que he encontrado es a partir de este comentario de jaengelberg en github : desinstale matplotlib, cambie temporalmente el nombre de los encabezados libpng de XQuartz para que no se puedan encontrar, instale matplotlib y luego vuelva a cambiar los nombres de los encabezados.

Aquí es en su totalidad:

 pip uninstall matplotlib cd /opt/X11/include/libpng15 sudo mv png.h _png.h sudo mv pngconf.h _pngconf.h sudo mv pnglibconf.h _pnglibconf.h pip install matplotlib sudo mv _png.h png.h sudo mv _pngconf.h pngconf.h sudo mv _pnglibconf.h pnglibconf.h 

Tuve este mismo problema al intentar ver imágenes de OpenCV en el cuaderno Jupyter mientras trabajaba en un entorno de Anaconda. Forzar una reinstalación de matplotlib funcionó para mí:

 pip install -U --force-reinstall matplotlib 

Encontré este método mientras miraba este enlace de GitHub de la solución de Matt.

Para mi poniendo

 %matplotlib inline 

Antes de que todas las importaciones de matplotlib resolvieran este problema

Yo tuve este problema también. Otra solución es cambiar el formato en el que el portátil renderizará las imágenes, de ‘png’ a ‘svg’. Esto se puede hacer en su archivo de configuración . La mía se encuentra en:

 ~/.ipython/profile_default/ipython_notebook_config.py 

Hay una línea que se ve así

 # c.InlineBackend.figure_format = 'png' 

Descomentar y cambiar a ‘svg’ hizo el truco para mí:

 c.InlineBackend.figure_format = 'svg' 

tal vez es cargar el libpng incorrecto en tiempo de ejecución. Si construiste matplotlib contra libpng 1.5, asegúrate de que también lo ejecutas. Libpng 1.2 y 1.5 no son compatibles.

en un shell puede configurar DYLD_LIBRARY_PATH para cambiar la ubicación en la que el enlazador busca primero las bibliotecas.

 otool -L //matplotlib/_png.so 

debería decirle qué está encontrando matplotlib en el tiempo de ejecución.

Tuve casi la misma experiencia:

  • Exactamente el mismo “RuntimeError: No se pudo crear la estructura de escritura” en IPython Notebook
  • Exactamente la misma “advertencia de libpng: aplicación creada con libpng-1.2.41 pero que se ejecuta con 1.5.13”
  • Mismo sistema operativo: Mac OS X10.6
  • py33-ipython @ 0.13.1_0 + notebook + paralelo (de MacPorts)
  • python3.3 (de MacPorts) en lugar de tu python2.7 (solo lo veo de ti)

Creo que la receta de MacPorts para IPython puede tener algunos problemas para algunas versiones del sistema operativo.

No estoy seguro de dónde obtuviste tu python2.7, pero mi solución fue que finalmente abandoné MacPorts en favor de homebrew (que también tenía algunos problemas, pero pude resolverlos instalando algunos paquetes directamente de las fonts, consulta esta pregunta ) .