Несовместимость версии libpng при новой установке IPython

Я использовал это руководство для установки "научного стека" для Python (OSX 10.9.2, заварной Python 2.7.6, IPython 2.0, matplotlib 1.3.1, libpng 1.6.10). Все выглядело хорошо.

Однако попытка запустить простой сюжет в среде ноутбука IPython с --pylab=inline дает мне эту ошибку:

/usr/local/Cellar/python/2.7.6/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/IPython/core/formatters.py:239: FormatterWarning: Exception in image/png formatter: Could not create write struct FormatterWarning,

И в терминале говорится: libpng warning: Application built with libpng-1.5.17 but running with 1.6.10

У меня нет других libpng, установленных, насколько я могу судить. Я попытался удалить все файлы, начинающиеся с libpng с /usr/local/, и переустановить все, но безрезультатно. Выходной сигнал от построения matplotlib (pip install matplotlib) содержит:

BUILDING MATPLOTLIB
            matplotlib: yes [1.3.1]
                python: yes [2.7.6 (default, Mar 16 2014, 15:04:47)  [GCC
                        4.2.1 Compatible Apple LLVM 5.1 (clang-503.0.38)]]
              platform: yes [darwin]

REQUIRED DEPENDENCIES AND EXTENSIONS
                 numpy: yes [version 1.8.1]
              dateutil: yes [using dateutil version 2.2]
               tornado: yes [using tornado version 3.2]
             pyparsing: yes [using pyparsing version 2.0.1]
                 pycxx: yes [Couldn't import.  Using local copy.]
                libagg: yes [pkg-config information for 'libagg' could not
                        be found. Using local copy.]
              freetype: yes [version 17.2.11]
                   png: yes [version 1.6.10]

OPTIONAL SUBPACKAGES
           sample_data: yes [installing]
              toolkits: yes [installing]
                 tests: yes [using nose version 1.3.1]

OPTIONAL BACKEND EXTENSIONS
                macosx: yes [installing, darwin]
                qt4agg: yes [installing, Qt: 4.8.6, PyQt4: 4.10.4]
               gtk3agg: no  [Requires pygobject to be installed.]
             gtk3cairo: no  [Requires cairo to be installed.]
                gtkagg: no  [Requires pygtk]
                 tkagg: yes [installing, version 81008]
                 wxagg: no  [requires wxPython]
                   gtk: no  [Requires pygtk]
                   agg: yes [installing]
                 cairo: no  [cairo not found]
             windowing: no  [Microsoft Windows only]

OPTIONAL LATEX DEPENDENCIES
                dvipng: no
           ghostscript: no
                 latex: no
               pdftops: no

Итак, мне кажется, matplotlib должен быть скомпилирован против libpng 1.6.10? Может кто-нибудь помочь мне выяснить, что происходит?

Ответы

Ответ 1

Ищите старые файлы заголовков, начинающиеся с "png" (png.h, pngconf.h, возможно, другие) и удаляйте их.

Ответ 2

Расширение ответа, предоставленного @glenn-randers-pehrson:

pip uninstall matplotlib
cd /opt/X11/include/libpng15
mv png.h _png.h
mv pngconf.h _pngconf.h
mv pnglibconf.h _pnglibconf.h
pip install matplotlib
(if needed remove the old directory or use the force option)

(now move the .h files back to their original locations)

Ответ 3

В целях документации (следуя приведенным выше комментариям):

Удалить X11

launchctl unload /Library/LaunchAgents/org.macosforge.xquartz.startx.plist
sudo launchctl unload /Library/LaunchDaemons/org.macosforge.xquartz.privileged_startx.plist
sudo rm -rf /opt/X11* /Library/Launch*/org.macosforge.xquartz.* /Applications/Utilities/XQuartz.app /etc/*paths.d/*XQuartz
sudo pkgutil --forget org.macosforge.xquartz.pkg

Затем

если у вас установлен matplotlib/python, выполните следующие действия:

pip uninstall matplotlib
pip uninstall ipython

Затем

pip install matplotlib
pip install ipython

При необходимости XQuartz можно повторно установить из https://www.macupdate.com/app/mac/26593/xquartz.

[Примечание. Это повторно добавляет файлы /opt/X 11/include/libpng15/png.h и т.д., но впоследствии ipython работал нормально.]

Ответ 4

Пока немного смешно иметь несколько копий libpng, эта проблема возникает из-за того, что путь для компилятора pip и python отличается. Вы также можете исправить эту проблему по пути, а затем перекомпилировать, но вышеупомянутые решения тоже работают.