[我最初在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,产生这些结果的一种方法如下所示;显示的所有步骤(包括对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,包括使用系统提供的安装python,那些使用homebrew
安装的python的那些,或那些使用python直接从源安装到我的主目录下的位置的那些。
关于可能发生的事情或我能做些什么的任何想法?
答案 0 :(得分:4)
我遇到了同样的问题,我找到的一个解决方案就是添加一行:
plt.ion()
在第一个绘图命令之前。这将打开交互式绘图模式,并且错误消息将消失。这只适用于我在命令行上绘图时,如果我在脚本中执行ion()然后show(),则根本不会显示图形,如果我离开离子(),我可以看到我的情节,但我收到错误消息。这只是在更新到1.2.0版本后才发生。
答案 1 :(得分:1)
它试图用Cocoa做一些事情,但Cocoa还没有真正初始化或任何东西。您可以通过以下操作来解决错误并解决问题:
from Foundation import NSAutoreleasePool
pool = NSAutoreleasePool()
之后:
from AppKit import NSApplication
NSApplication.sharedApplication().run()
这需要PyObjC。不幸的是,这可能只允许每个IPython会话显示一个图。您可能希望尝试使用IPython笔记本,这样可以消除对Cocoa的依赖。