2

[私はもともとこれを serverfault に投稿しましたが、代わりにここに投稿するようにアドバイスされました。]

Matplotlib は、データ視覚化のための Python ライブラリです。画面にグラフを表示しようとすると、次のエラー/警告が表示されます。

2012-12-21 16:40:05.532 python[9705:903] *** __NSAutoreleaseNoPool(): Object 0x103e25d80 of class NSCFArray autoreleased with no pool in place - just leaking
2012-12-21 16:40:05.534 python[9705:903] *** __NSAutoreleaseNoPool(): Object 0x103e26820 of class __NSFastEnumerationEnumerator autoreleased with no pool in place - just leaking
2012-12-21 16:40:05.535 python[9705:903] *** __NSAutoreleaseNoPool(): Object 0x103e9f080 of class NSObject autoreleased with no pool in place - just leaking

FWIW、これらの結果を生成する 1 つの方法を以下に示します。示されているすべての手順 (ipython の呼び出しを含む) は、matplotlib チュートリアルから取得されます。

% ipython
...
In [1]: import matplotlib.pyplot as plt

In [2]: plt.plot([1, 3, 2, 4])
Out[3]: [<matplotlib.lines.Line2D at 0x106aabd90>]

In [3]: plt.show()

また、FWIW、python + numpy + matplotlib + ipythonの複数のインストールスタイル(同じマシン上)でまったく同じ動作homebrewを観察しました。これには、システム提供のpythonを使用するインストール、によってインストールされたpythonを使用するインストールが含まれます。または、ソースから直接ホーム ディレクトリから離れた場所にインストールされた Python を使用するもの。

何が起こっているのか、またはそれについて何ができるかについてのアイデアはありますか?

4

2 に答える 2

4

私は同じ問題を抱えています。私が見つけた1つの解決策は、次の行を追加することです:

plt.ion()

最初のプロット コマンドの前。これにより、対話型プロット モードが有効になり、エラー メッセージが消えます。これは、コマンドラインでプロットする場合にのみ機能します。スクリプトでion()を実行してからshow()を実行すると、プロットがまったく表示されず、ion()を省略した場合、見ることができます私のプロットですが、エラーメッセージが表示されます。これは、バージョン 1.2.0 に更新してから発生したものです。

于 2013-02-13T22:23:48.393 に答える
1

Cocoa で何かをしようとしていますが、Cocoa は実際には初期化されていません。これを前に実行することで、エラーを黙らせて問題を解決できる場合があります。

from Foundation import NSAutoreleasePool
pool = NSAutoreleasePool()

そしてこの後:

from AppKit import NSApplication
NSApplication.sharedApplication().run()

これには PyObjC が必要です。残念ながら、これは IPython セッションごとに 1 つのプロットしか表示できない可能性があります。代わりに、Cocoa への依存を取り除く IPython ノートブックを試してみることをお勧めします。

于 2012-12-22T22:25:25.057 に答える