12

ipython notebook を使おうとしていました。すべての依存ライブラリをインストールしました。ただし、ipython を起動するときに「--pylab=inline」オプションを使用することも、Ipython コンソールで「savefig」関数を使用することもできません。いずれかを実行しようとすると、matplotlib の実行により「RuntimeError: 書き込み構造体を作成できませんでした」というエラー メッセージが返されました。また、notebookApp プロンプトからの警告には、「libpng 警告: アプリケーションは libpng-1.2.41 でビルドされていますが、1.5.13 で実行されています」とありました。

ただし、最新のlibpng(1.5.13)をインストールし、pip uninstallでmatplotlibをアンインストールし、pip installでmatplotlibを再インストールしました(ビルドプロセス中に、libpng1.5.13がmatplotlibのビルドに使用されていることがわかります)。

私のシステムの構成は、Mac OS X10.6、python2.7 です。誰かが同様の経験やいくつかの提案をしていますか?

トレースバック エラーは次のとおりです。

[<matplotlib.lines.Line2D at 0x106066d50>]
---------------------------------------------------------------------------
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

どうもありがとう、

4

6 に答える 6

7

libpng が homebrew 経由でインストールされ、XQuartz もインストールされている OS X Mavericks でも同じ問題が発生しました。matplotlib は、コンパイル時に古い XQuartz libpng バージョンを見つけていましたが、実行時に最新の自作 libpng を見つけていたことが判明しました。

私が見つけた最良の解決策は、github の jaengelberg によるこのコメントからのものです。matplotlib をアンインストールし、一時的に XQuartz libpng ヘッダーの名前を変更して見つからないようにし、matplotlib をインストールしてから、ヘッダー名を元に戻します。

これが完全です:

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
于 2014-05-28T17:04:50.330 に答える
4

Anaconda 環境で作業しているときに、Jupyter Notebook で OpenCV の画像を表示しようとしたときに、同じ問題が発生しました。matplotlib の再インストールを強制すると、うまくいきました。

pip install -U --force-reinstall matplotlib

Matt のソリューションからこの GitHub リンクを見ているときに、この方法を見つけました。

于 2016-09-16T19:36:14.507 に答える
2

私もこの問題を抱えていました。別の解決策は、ノートブックが画像をレンダリングする形式を「png」から「svg」に変更することです。これは構成ファイルで行うことができます。私の場所は次のとおりです。

~/.ipython/profile_default/ipython_notebook_config.py

このように見える行があります

# c.InlineBackend.figure_format = 'png'

コメントを外して「svg」に変更すると、うまくいきました:

c.InlineBackend.figure_format = 'svg'
于 2013-11-12T05:28:29.727 に答える
1

実行時に間違った libpng をロードしている可能性があります。libpng 1.5 に対して matplotlib をビルドした場合は、それを使用して実行することも確認してください。libpng 1.2 と 1.5 は互換性がありません。

シェルでは、DYLD_LIBRARY_PATH を設定して、リンカーが最初にライブラリを検索する場所を変更できます。

otool -L /<somepath>/matplotlib/_png.so

実行時にmatplotlibが何を見つけているかを教えてくれるはずです。

于 2012-12-19T21:55:53.200 に答える
0

私はほぼ同じ経験をしました:

  • IPython Notebook のまったく同じ「RuntimeError: 書き込み構造体を作成できませんでした」
  • まったく同じ「libpng 警告: アプリケーションは libpng-1.2.41 でビルドされていますが、1.5.13 で実行されています」
  • 同OS:Mac OS X10.6
  • py33-ipython @0.13.1_0+notebook+parallel (MacPorts から)
  • あなたのpython2.7の代わりにpython3.3(MacPortsから)(あなたから見た差分のみ)

IPython の MacPorts レシピは、一部の OS バージョンで問題が発生する可能性があると思います。

どこから python2.7 を入手したのかわかりませんが、私の解決策は、最終的に自作を支持して MacPorts を捨てたことでした (これにもいくつか問題がありましたが、ソースから直接いくつかのパッケージをインストールすることで解決できました。この質問を参照してください) 。 .

于 2013-01-25T23:30:10.247 に答える