Multithreading problem with print_png and font object?

Karen Tracey wrote:

Hmm, the Ubuntu packaging for matplotlib seems to put a copy of matplotlibrc only in /etc, where, I gather, it will not ever be used by matplotlib? I guess one is supposed to copy it to one’s home directory and do per-user customization there. For my case, where the code is running under Apache, I’d guess no matplotlibrc is being found so all defaults are being used.

Karen,

That seems a little odd; matplotlib doesn’t look in /etc by default. Although I run ubuntu, I have never used the ubuntu package, so I have not run into this.

The default matplotlibrc has been stripped down to a bare minimum: everything but the default backend selection is commented out.

You may have already discovered this, but in case you haven’t, you can find out where the active matplotlibrc is being found by using matplotlib_fname():

In [1]:import matplotlib

In [2]:matplotlib.matplotlib_fname()

Out[2]:’/usr/local/lib/python2.5/site-packages/matplotlib/mpl-data/matplotlibrc’

Thanks, I hadn’t found that. It seems the Ubuntu packaging has changed things a bit:

kmt@…713…:~$ python
Python 2.5.2 (r252:60911, Oct 5 2008, 19:24:49)
[GCC 4.3.2] on linux2

Type “help”, “copyright”, “credits” or “license” for more information.

import matplotlib
matplotlib.version
‘0.98.3’

matplotlib.matplotlib_fname()
‘/etc/matplotlibrc’

matplotlib.get_data_path()
‘/usr/share/matplotlib/mpl-data’

Looking at the source code, I see in /usr/lib/python2.5/site-packages/matplotlib/init.py (which is actually a link to /usr/share/pyshared/matplotlib/init.py which I gather is a way of having packages that run under multiple Python versions only have one copy of the files installed), in matplotlib_fname, the very end is:

path =  '/etc' # guaranteed to exist or raise
fname = os.path.join(path, 'matplotlibrc')
if not os.path.exists(fname):
    warnings.warn('Could not find matplotlibrc; using defaults')

return fname

That is, it looks like they have hardcoded ‘/etc’ where the lib/matplotlib/init.py file in SVN has a call to get_data_path(). Don’t know why, but apparently if you run the Ubuntu repository version it’s /etc/matplotlibrc that gets used (assuming nothing is found earlier in the search order). They like all config-type files to be under /etc maybe?

Thank you for the test script. I have added it to the “unit” subdirectory of matplotlib, after adding a short docstring. JDH may want to modify or move it.

You’re welcome. Hope it’s useful. I am glad the fix was relatively simple.

Karen

···

On Sat, Mar 28, 2009 at 11:45 PM, Eric Firing <efiring@…229…> wrote:

They are trying to do right by the linux file standard. /etc is really where the global matplotlibrc belongs.

Darren

···

On Sun, Mar 29, 2009 at 1:14 AM, Karen Tracey <kmtracey@…714…> wrote:

On Sat, Mar 28, 2009 at 11:45 PM, Eric Firing <efiring@…229…> wrote:

Karen Tracey wrote:

Hmm, the Ubuntu packaging for matplotlib seems to put a copy of matplotlibrc only in /etc, where, I gather, it will not ever be used by matplotlib? I guess one is supposed to copy it to one’s home directory and do per-user customization there. For my case, where the code is running under Apache, I’d guess no matplotlibrc is being found so all defaults are being used.

Karen,

That seems a little odd; matplotlib doesn’t look in /etc by default. Although I run ubuntu, I have never used the ubuntu package, so I have not run into this.

The default matplotlibrc has been stripped down to a bare minimum: everything but the default backend selection is commented out.

You may have already discovered this, but in case you haven’t, you can find out where the active matplotlibrc is being found by using matplotlib_fname():

In [1]:import matplotlib

In [2]:matplotlib.matplotlib_fname()

Out[2]:’/usr/local/lib/python2.5/site-packages/matplotlib/mpl-data/matplotlibrc’

Thanks, I hadn’t found that. It seems the Ubuntu packaging has changed things a bit:

kmt@…713…:~$ python
Python 2.5.2 (r252:60911, Oct 5 2008, 19:24:49)
[GCC 4.3.2] on linux2

Type “help”, “copyright”, “credits” or “license” for more information.

import matplotlib
matplotlib.version
‘0.98.3’

matplotlib.matplotlib_fname()
‘/etc/matplotlibrc’

matplotlib.get_data_path()
‘/usr/share/matplotlib/mpl-data’

Looking at the source code, I see in /usr/lib/python2.5/site-packages/matplotlib/init.py (which is actually a link to /usr/share/pyshared/matplotlib/init.py which I gather is a way of having packages that run under multiple Python versions only have one copy of the files installed), in matplotlib_fname, the very end is:

path =  '/etc' # guaranteed to exist or raise
fname = os.path.join(path, 'matplotlibrc')
if not os.path.exists(fname):
    warnings.warn('Could not find matplotlibrc; using defaults')




return fname

That is, it looks like they have hardcoded ‘/etc’ where the lib/matplotlib/init.py file in SVN has a call to get_data_path(). Don’t know why, but apparently if you run the Ubuntu repository version it’s /etc/matplotlibrc that gets used (assuming nothing is found earlier in the search order). They like all config-type files to be under /etc maybe?