One way this could happen is if the .matplotlib directory exists but is not writable; such a case would give the error traceback you see with little clue as to what and where the problem really is. So, __init__.py certainly could be improved. (Offhand, I don't even know why the existence of such a writable config directory should be required.)
In the meantime, to solve your particular problem: my guess is that when you run a script as a daemon, and it runs more scripts, the environment is not what you think it is (or what it is when you run interactively), so __init__.py is not looking where you think it is. Either that, or the uid/gid of the script are not the same as yours, so the script can't write to your .matplotlib directory even though you can. Instead of ignoring the _is_writable(p) result, you might want to try printing out os.path.abspath(p) to verify where p really is. Eric Evert Rol wrote: > Hi all, > > I recently run into a problem with the .matplotlib directory. I run a > script as a daemon, that in its turn runs several scripts to create > graphs (often the same script with different input parameters), > dependent on an outside trigger. Recently, I found that these script > crashed with an OSError during the 'import matplotlib' phase, at the > point where it tries to check that the .matplotlib directory is > writeable. The exact traceback is appended below. > > Searching on the mailing list, I found someone had the same problem > almost a year ago ( http://sourceforge.net/mailarchive/message.php? > msg_id=44964AD1.605%40yahoo.com ), but it appears that that post > doesn't have a response. > A wider search resulted in this post, http://osdir.com/ml/python.peak/ > 2006-06/msg00019.html , where the response suggests these problems > are caused by all the things mpl does in its __init__ file. > > A few notes on my setup: > - the .matplotlib is a symbolic link to a .python/matplotlib > directory, since I'd like to keep my python resources together > (eg, .python also contains an ipython directory). I've currently > changed the symlink to a proper directory, but haven't had a chance > to test this new setup. Anyway, afaik, symlinks should work properly > - the scripts that are run from the daemon script, are run in the > background, and quite often shortly after each other. Whether that > creates a deadlock situation or something, I don't know. Obviously, > I'm using a non-interactive backend, agg in this case. > - the problem only showed after I upgraded from mpl version 0.87 to 0.9. > - interactively, everything runs fine. > - everything runs under a locally installed python, which is called > with the appropriate path from the script > - python version 2.4.4, numpy version 1.0 > > > Does anyone have a suggestion what went wrong, and how to properly > fix all this? As a temporary measure, I now ignore the _is_writeable > (p) result in __init__.py (the directory, and therefore the symlink, > were/are writeable when this occurred, as far as I can tell). > > I like mpl very much, but this problem may render it much less usable > for me; a temporary fix would be fine for now, but it actually feels > like a bug to me. > > Thanks a lot, > > Evert > > > full traceback (note: replaced directories with ~) > > Traceback (most recent call last): > File "~/myscript.py", line 64, in ? > sys.exit(main()) > File "~/myscript.py", line 59, in main > return run(parser) > File "~/myscript.py", line 27, in run > sigmaclip=parser['sigmaclip'], invert=True, compass=True) > File "~/python/modules/fitsimage/FITSImage_numpy.py", line 777, in > plot > import matplotlib as mpl > File "~/sw/lib/python2.4/site-packages/matplotlib/__init__.py", > line 1019, in ? > rcParams = rc_params() > File "~/sw/lib/python2.4/site-packages/matplotlib/__init__.py", > line 976, in rc_params > fname = matplotlib_fname() > File "~/sw/lib/python2.4/site-packages/matplotlib/__init__.py", > line 922, in matplotlib_fname > fname = os.path.join(get_configdir(), 'matplotlibrc') > File "~/sw/lib/python2.4/site-packages/matplotlib/__init__.py", > line 273, in wrapper > ret = func(*args, **kwargs) > File "~/sw/lib/python2.4/site-packages/matplotlib/__init__.py", > line 329, in _get_configdir > os.mkdir(p) > OSError: [Errno 17] File exists: '<...>/.matplotlib' > > > ------------------------------------------------------------------------- > This SF.net email is sponsored by DB2 Express > Download DB2 Express C - the FREE version of DB2 express and take > control of your XML. No limits. Just data. Click to get it now. > http://sourceforge.net/powerbar/db2/ > _______________________________________________ > Matplotlib-users mailing list > Matplotlib-users@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/matplotlib-users ------------------------------------------------------------------------- This SF.net email is sponsored by DB2 Express Download DB2 Express C - the FREE version of DB2 express and take control of your XML. No limits. Just data. Click to get it now. http://sourceforge.net/powerbar/db2/ _______________________________________________ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users