[Matplotlib-users] RuntimeError: Could not open facefile
Hi, I'm running into this RuntimeError: Could not open facefile c:\Python32\lib\site-packages\matplotlib\mpl-data\fonts\ttf\Vera.ttf; Cannot_Open_Resource when I'm trying to save out a series of *.png files in a loop. It crashes on this error after many passes through the loop and successful files get created, but then always on the same pass it does this. The full traceback is here: File C:\Users\E440710\Desktop\PythonTransfer\fittslaw_ThroughputCalc_AS_break.py, line 744, in module fig.savefig(fname, transparent = True) File c:\Python32\lib\site-packages\matplotlib\figure.py, line 1174, in savefig self.canvas.print_figure(*args, **kwargs) File c:\Python32\lib\site-packages\matplotlib\backend_bases.py, line 2027, in print_figure **kwargs) File c:\Python32\lib\site-packages\matplotlib\backends\backend_agg.py, line 451, in print_png FigureCanvasAgg.draw(self) File c:\Python32\lib\site-packages\matplotlib\backends\backend_agg.py, line 400, in draw self.figure.draw(self.renderer) File c:\Python32\lib\site-packages\matplotlib\artist.py, line 56, in draw_wrapper draw(artist, renderer, *args, **kwargs) File c:\Python32\lib\site-packages\matplotlib\figure.py, line 887, in draw func(*args) File c:\Python32\lib\site-packages\matplotlib\artist.py, line 56, in draw_wrapper draw(artist, renderer, *args, **kwargs) File c:\Python32\lib\site-packages\matplotlib\axes.py, line 1985, in draw a.draw(renderer) File c:\Python32\lib\site-packages\matplotlib\artist.py, line 56, in draw_wrapper draw(artist, renderer, *args, **kwargs) File c:\Python32\lib\site-packages\matplotlib\axis.py, line 1043, in draw ticklabelBoxes, ticklabelBoxes2 = self._get_tick_bboxes(ticks_to_draw, renderer) File c:\Python32\lib\site-packages\matplotlib\axis.py, line 994, in _get_tick_bboxes extent = tick.label1.get_window_extent(renderer) File c:\Python32\lib\site-packages\matplotlib\text.py, line 743, in get_window_extent bbox, info = self._get_layout(self._renderer) File c:\Python32\lib\site-packages\matplotlib\text.py, line 296, in _get_layout ismath=False) File c:\Python32\lib\site-packages\matplotlib\backends\backend_agg.py, line 182, in get_text_width_height_descent font = self._get_agg_font(prop) File c:\Python32\lib\site-packages\matplotlib\backends\backend_agg.py, line 223, in _get_agg_font font = FT2Font(str(fname)) RuntimeError: Could not open facefile c:\Python32\lib\site-packages\matplotlib\mpl-data\fonts\ttf\Vera.ttf; Cannot_Open_Resource I've tried the various fixes that have been suggested - removing the fontList.py3k.cache and even the removing the .matplotlib directory. However when I run my script that's producing the error the directory gets recreated along with the fontList.py3k.cache which must be pointing to the wrong path? When I check the path c:\Python32\lib\site-packages\matplotlib\mpl-data\fonts\ttf\Vera.ttf where matplotlib is looking for the resource it cannot open - the Vera.ttf is there. This only happens after many iterations through the loop that is saving out the *.png files and I have no idea why. The relevant code from my script is here: for p in plotData[k][data]: #print(p in plotData[k]:,p) a = numpy.array((loc[0],loc[1])) b = numpy.array((p[0],p[1])) distValue = (numpy.sqrt(numpy.sum((a-b)**2) ))/86.0 #divide by 86 because that was the ppi on the display used to collect the data if p[2] == 1: hit_x.append(loc[0]-p[0]) hit_y.append(loc[1]-p[1]) frame_hit_x = loc[0]-p[0] frame_hit_y = loc[1]-p[1] print(frame_x:, frame_hit_x) files = [] if size == (0.25,0.25) and makeMovie: fig = plt.figure() print(fig:, fig) plt.plot(frame_hit_x,frame_hit_y,color='green',marker='o',linestyle='') plt.axis('scaled') plt.axis([-100,100,-100,100]) fname = subj{:g}_size{:g}_hit_x{:g}.png.format(Subject,btnSize,frame_hit_x) print('saving frame', fname) fig.savefig(fname, transparent = True) files.append(fname) I'm on a Win7 64bit using python 3.2 and matplotlib version 1.2.x Any help would be greatly appreciated! Andy -- This SF email is sponsosred by: Try Windows Azure free for 90 days Click Here http://p.sf.net/sfu/sfd2d-msazure___ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users
Re: [Matplotlib-users] RuntimeError: Could not open facefile
This is a known bug on Windows where it runs out of file handles after a while. This commit was an attempt to fix it, but it doesn't seem to work: https://github.com/matplotlib/matplotlib/commit/4cb2aaa87b0aa9efe7178d7510d3d091ef5206df I think we need a Windows user/developer/expert to get to the bottom of why file handles are not being freed to the OS. Mike On 03/23/2012 04:35 PM, Andrew Smart wrote: Hi, I'm running into this RuntimeError: Could not open facefile c:\Python32\lib\site-packages\matplotlib\mpl-data\fonts\ttf\Vera.ttf; Cannot_Open_Resource when I'm trying to save out a series of *.png files in a loop. It crashes on this error after many passes through the loop and successful files get created, but then always on the same pass it does this. The full traceback is here: File C:\Users\E440710\Desktop\PythonTransfer\fittslaw_ThroughputCalc_AS_break.py, line 744, in module fig.savefig(fname, transparent = True) File c:\Python32\lib\site-packages\matplotlib\figure.py, line 1174, in savefig self.canvas.print_figure(*args, **kwargs) File c:\Python32\lib\site-packages\matplotlib\backend_bases.py, line 2027, in print_figure **kwargs) File c:\Python32\lib\site-packages\matplotlib\backends\backend_agg.py, line 451, in print_png FigureCanvasAgg.draw(self) File c:\Python32\lib\site-packages\matplotlib\backends\backend_agg.py, line 400, in draw self.figure.draw(self.renderer) File c:\Python32\lib\site-packages\matplotlib\artist.py, line 56, in draw_wrapper draw(artist, renderer, *args, **kwargs) File c:\Python32\lib\site-packages\matplotlib\figure.py, line 887, in draw func(*args) File c:\Python32\lib\site-packages\matplotlib\artist.py, line 56, in draw_wrapper draw(artist, renderer, *args, **kwargs) File c:\Python32\lib\site-packages\matplotlib\axes.py, line 1985, in draw a.draw(renderer) File c:\Python32\lib\site-packages\matplotlib\artist.py, line 56, in draw_wrapper draw(artist, renderer, *args, **kwargs) File c:\Python32\lib\site-packages\matplotlib\axis.py, line 1043, in draw ticklabelBoxes, ticklabelBoxes2 = self._get_tick_bboxes(ticks_to_draw, renderer) File c:\Python32\lib\site-packages\matplotlib\axis.py, line 994, in _get_tick_bboxes extent = tick.label1.get_window_extent(renderer) File c:\Python32\lib\site-packages\matplotlib\text.py, line 743, in get_window_extent bbox, info = self._get_layout(self._renderer) File c:\Python32\lib\site-packages\matplotlib\text.py, line 296, in _get_layout ismath=False) File c:\Python32\lib\site-packages\matplotlib\backends\backend_agg.py, line 182, in get_text_width_height_descent font = self._get_agg_font(prop) File c:\Python32\lib\site-packages\matplotlib\backends\backend_agg.py, line 223, in _get_agg_font font = FT2Font(str(fname)) RuntimeError: Could not open facefile c:\Python32\lib\site-packages\matplotlib\mpl-data\fonts\ttf\Vera.ttf; Cannot_Open_Resource I've tried the various fixes that have been suggested - removing the fontList.py3k.cache and even the removing the .matplotlib directory. However when I run my script that's producing the error the directory gets recreated along with the fontList.py3k.cache which must be pointing to the wrong path? When I check the path c:\Python32\lib\site-packages\matplotlib\mpl-data\fonts\ttf\Vera.ttf where matplotlib is looking for the resource it cannot open - the Vera.ttf is there. This only happens after many iterations through the loop that is saving out the *.png files and I have no idea why. The relevant code from my script is here: for p in plotData[k][data]: #print(p in plotData[k]:,p) a = numpy.array((loc[0],loc[1])) b = numpy.array((p[0],p[1])) distValue = (numpy.sqrt(numpy.sum((a-b)**2) ))/86.0 #divide by 86 because that was the ppi on the display used to collect the data if p[2] == 1: hit_x.append(loc[0]-p[0]) hit_y.append(loc[1]-p[1]) frame_hit_x = loc[0]-p[0] frame_hit_y = loc[1]-p[1] print(frame_x:, frame_hit_x) files = [] if size == (0.25,0.25) and makeMovie: fig = plt.figure() print(fig:, fig) plt.plot(frame_hit_x,frame_hit_y,color='green',marker='o',linestyle='') plt.axis('scaled') plt.axis([-100,100,-100,100]) fname = subj{:g}_size{:g}_hit_x{:g}.png.format(Subject,btnSize,frame_hit_x) print('saving frame', fname) fig.savefig(fname, transparent = True) files.append(fname) I'm on a Win7 64bit using python 3.2 and matplotlib version 1.2.x Any help would be greatly appreciated! Andy -- This SF email
Re: [Matplotlib-users] RuntimeError: Could not open facefile
Ok thank you - so one way to work around it is to just generate the files I want in batches so Windows won't run out of file handles - but is there a way to know how many handles are available? I'm trying to animate some data and I don't really know how many frames there are - could be thousands. Andy On Fri, Mar 23, 2012 at 3:45 PM, Michael Droettboom md...@stsci.edu wrote: This is a known bug on Windows where it runs out of file handles after a while. This commit was an attempt to fix it, but it doesn't seem to work: https://github.com/matplotlib/matplotlib/commit/4cb2aaa87b0aa9efe7178d7510d3d091ef5206df I think we need a Windows user/developer/expert to get to the bottom of why file handles are not being freed to the OS. Mike On 03/23/2012 04:35 PM, Andrew Smart wrote: Hi, I'm running into this RuntimeError: Could not open facefile c:\Python32\lib\site-packages\matplotlib\mpl-data\fonts\ttf\Vera.ttf; Cannot_Open_Resource when I'm trying to save out a series of *.png files in a loop. It crashes on this error after many passes through the loop and successful files get created, but then always on the same pass it does this. The full traceback is here: File C:\Users\E440710\Desktop\PythonTransfer\fittslaw_ThroughputCalc_AS_break.py, line 744, in module fig.savefig(fname, transparent = True) File c:\Python32\lib\site-packages\matplotlib\figure.py, line 1174, in savefig self.canvas.print_figure(*args, **kwargs) File c:\Python32\lib\site-packages\matplotlib\backend_bases.py, line 2027, in print_figure **kwargs) File c:\Python32\lib\site-packages\matplotlib\backends\backend_agg.py, line 451, in print_png FigureCanvasAgg.draw(self) File c:\Python32\lib\site-packages\matplotlib\backends\backend_agg.py, line 400, in draw self.figure.draw(self.renderer) File c:\Python32\lib\site-packages\matplotlib\artist.py, line 56, in draw_wrapper draw(artist, renderer, *args, **kwargs) File c:\Python32\lib\site-packages\matplotlib\figure.py, line 887, in draw func(*args) File c:\Python32\lib\site-packages\matplotlib\artist.py, line 56, in draw_wrapper draw(artist, renderer, *args, **kwargs) File c:\Python32\lib\site-packages\matplotlib\axes.py, line 1985, in draw a.draw(renderer) File c:\Python32\lib\site-packages\matplotlib\artist.py, line 56, in draw_wrapper draw(artist, renderer, *args, **kwargs) File c:\Python32\lib\site-packages\matplotlib\axis.py, line 1043, in draw ticklabelBoxes, ticklabelBoxes2 = self._get_tick_bboxes(ticks_to_draw, renderer) File c:\Python32\lib\site-packages\matplotlib\axis.py, line 994, in _get_tick_bboxes extent = tick.label1.get_window_extent(renderer) File c:\Python32\lib\site-packages\matplotlib\text.py, line 743, in get_window_extent bbox, info = self._get_layout(self._renderer) File c:\Python32\lib\site-packages\matplotlib\text.py, line 296, in _get_layout ismath=False) File c:\Python32\lib\site-packages\matplotlib\backends\backend_agg.py, line 182, in get_text_width_height_descent font = self._get_agg_font(prop) File c:\Python32\lib\site-packages\matplotlib\backends\backend_agg.py, line 223, in _get_agg_font font = FT2Font(str(fname)) RuntimeError: Could not open facefile c:\Python32\lib\site-packages\matplotlib\mpl-data\fonts\ttf\Vera.ttf; Cannot_Open_Resource I've tried the various fixes that have been suggested - removing the fontList.py3k.cache and even the removing the .matplotlib directory. However when I run my script that's producing the error the directory gets recreated along with the fontList.py3k.cache which must be pointing to the wrong path? When I check the path c:\Python32\lib\site-packages\matplotlib\mpl-data\fonts\ttf\Vera.ttf where matplotlib is looking for the resource it cannot open - the Vera.ttf is there. This only happens after many iterations through the loop that is saving out the *.png files and I have no idea why. The relevant code from my script is here: for p in plotData[k][data]: #print(p in plotData[k]:,p) a = numpy.array((loc[0],loc[1])) b = numpy.array((p[0],p[1])) distValue = (numpy.sqrt(numpy.sum((a-b)**2) ))/86.0 #divide by 86 because that was the ppi on the display used to collect the data if p[2] == 1: hit_x.append(loc[0]-p[0]) hit_y.append(loc[1]-p[1]) frame_hit_x = loc[0]-p[0] frame_hit_y = loc[1]-p[1] print(frame_x:, frame_hit_x) files = [] if size == (0.25,0.25) and makeMovie: fig = plt.figure() print(fig:, fig) plt.plot(frame_hit_x,frame_hit_y,color='green',marker='o',linestyle='') plt.axis('scaled') plt.axis([-100,100,-100,100]) fname =
Re: [Matplotlib-users] RuntimeError: Could not open facefile
On Fri, Mar 23, 2012 at 3:35 PM, Andrew Smart andrew.johnsm...@gmail.comwrote: Hi, I'm running into this RuntimeError: Could not open facefile c:\Python32\lib\site-packages\matplotlib\mpl-data\fonts\ttf\Vera.ttf; Cannot_Open_Resource when I'm trying to save out a series of *.png files in a loop. It crashes on this error after many passes through the loop and successful files get created, but then always on the same pass it does this. The full traceback is here: I wonder if the solution is as simple as doing font caching at the class level rather than instance level. Andrew, could you try editing matplotlib/backends/backend_agg.py and replace class RendererAgg(RendererBase): The renderer handles all the drawing primitives using a graphics context instance that controls the colors/styles debug=1 def __init__(self, width, height, dpi): if __debug__: verbose.report('RendererAgg.__init__', 'debug-annoying') RendererBase.__init__(self) self.texd = maxdict(50) # a cache of tex image rasters self._fontd = maxdict(50) with class RendererAgg(RendererBase): The renderer handles all the drawing primitives using a graphics context instance that controls the colors/styles debug=1 _fontd = maxdict(50) texd = maxdict(50) # a cache of tex image rasters def __init__(self, width, height, dpi): if __debug__: verbose.report('RendererAgg.__init__', 'debug-annoying') RendererBase.__init__(self) Does anyone see an issue with doing this caching at the class level? If this works, we should have *many* fewer font files parsed. w/o modifying the src code, a related way to test this idea is to reuse the same figure instance and clear it at the start of the loop. Ie, rather than for i in range(N): fig = plt.figure() plot_something fig.savefig(...) do fig = plt.figure() for i in range(N): fig.clf() plot_something fig.savefig(...) I would try the latter first, and if that works I would appreciate it if you test the src code modification unless someone chimes in and tells us that is a really bad idea. JDH -- This SF email is sponsosred by: Try Windows Azure free for 90 days Click Here http://p.sf.net/sfu/sfd2d-msazure___ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users