Question about the data path

In article
<6382066a0606021619y7160280dn333a1a8d19d26a4a@...288...>,

> I'm using matplotlib in an application I distribute. For Windows and Mac
> users I distribute a frozen application which includes python,
> matplotlib, etc. and I'm wondering how best to include the matplotlib
> data files.
>
> matplotlib searches for its data files in __init__._get_data_path. It
> seems to search shared locations first, then locations that would be
> relevant to a frozen application. Is that safe? I worry that if a user
> of my app has their own version of matplotlib (possibly a very different
> version than I've included) then the data files might be different.
>
> If this really is an issue, then what to do?

The only way you could have conflicting data sources is if
MATPLOTLIBDATA is defined in your environment.
of setting that I am inclined to think they might know what to do in
case of an error. If that env var is not set, then mpl looks inside
the its module. Different installs will not see the others. We
finally have a special case for frozen installations. It has
primarily been made for py2exe, in which you should have a folder
called 'matplotlibdata' in your app's bundle.

OK, thanks. I had not realized that so few dirs were searched on Windows
as compared to unix/MacOS X, but you're right. So although the test for
frozen windows versions comes last, there's not much to collide with
before that.

> For Mac I can put the data files deep in the app in
> Contents/Frameworks/Python.Framework/2.4/share/matplotlib, which is the
> second location looked at (after environment variable MATPLOTLIBDATA).

The second location should be:
....Frameworks/Python.Framework/2.4/lib/python2.4/matplotlib/mpl-data

Are you using an old version of matplotlib?

I guess it's a bit old. 0.82. I need something built for MacOS X 10.3.9
so my bundled app runs on that.

Thanks for the heads up on the changed path. Maybe I'll remember to fix
my bundling code when I upgrade matplotlib.

> For Windows, there doesn't seem any way out. The Windows frozen test is
> dead last.

You can remove the MATPLOTLIBDATA env var from os.environ in your code.

Great idea. I'll do that. Thanks!

In my experience with distributing apps with matplotlib, I have known
in advanced the packages I want to use. For example, if I know I am
going to bundle Tkinter and numpy, then I make sure I have the
following before using any matplotlib commands.

import matplotlib
matplotlib.use('TkAgg')
matplotlib.rcParams['numerix'] = 'numpy'

Thanks for the tip. I knew about the first one, but not the second!

-- Russell

ยทยทยท

"Charlie Moad" <cwmoad@...287...> wrote:

On 6/2/06, Russell E. Owen <rowen@...529...> > wrote: