If you don't have any special use for the config dir, this might be a
more straightforward solution that doesn't require patching matplotlib.
Simply paste this in your code, before importing matplotlib :
import os
os.environ['HOME'] = '/tmp/'
Might be safer to use 'MPLCONFIGDIR' instead of 'HOME'.
Hope this helps.
Matthieu
Le 04/11/2010 16:49, Philip Semanchuk a écrit :
> Hi all,
> I've run into an aspect of matplotlib's setup that seems awkward. I'm seeing
> this on Ubuntu, but I imagine it would happen on any *nix platform.
>
> If python is running under sudo the first time matplotlib is imported, then
> matplotlib creates its config dir (~/.matplotlib) with root as the owner.
> Subsequent attempts to import matplotlib while running python as a
> non-privileged user result in this:
>
> -----------------------------------------------------------------
> RuntimeError: '/home/philip' is not a writable dir; you must set
> /home/philip/.matplotlib to be a writable dir. You can also set environment
> variable MPLCONFIGDIR to any writable directory where you want matplotlib
> data stored
> -----------------------------------------------------------------
>
> A simple way to re-create this --
> 1. Delete or rename ~/.matplotlib
> 2. sudo python -c "import matplotlib"
> 3. python -c "import matplotlib"
>
>
> This not-improbable real-world scenario would create ~/.matplotlib owned by
> root --
> 1) Download app FooBar that has matplotlib as a dependency
> 2) Install matplotlib
> 3) Run FooBar's setup.py as sudo. It imports matplotlib, perhaps just to
> ensure that matplotlib is installed and working.
>
>
> We ran into a similar situation with our app ('sudo python setup.py install'
> created desktop icons owned by root) and we resolved it by invoking chown
> after using a getenv() call to sniff out who we really wanted to own the file.
>
> It looks like the diff below (untested!) applied to
> lib/matplotlib/__init__.py would prevent this from happening. Does it seems
> reasonable to add it?
>
> 474a475,485
>> if not sys.platform.lower().startswith("win"):
>> # Ensure that we didn't just create a root-owned directory in
>> the
>> # user's HOME directory. That happens if this is being run under
>> # sudo. If the SUDO_USER env. var (which contains the user that
>> # invoked sudo) then we're running under sudo. If it doesn't
>> # exist, we're not running under sudo.
>> current_user = os.getenv("SUDO_USER")
>> if current_user:
>> subprocess.call(["chown", "-R", current_user, p])
>
> Thanks
> Philip
>
>
>
> ------------------------------------------------------------------------------
> The Next 800 Companies to Lead America's Growth: New Video Whitepaper
> David G. Thomson, author of the best-selling book "Blueprint to a
> Billion" shares his insights and actions to help propel your
> business during the next growth cycle. Listen Now!
> http://p.sf.net/sfu/SAP-dev2dev
> _______________________________________________
> Matplotlib-users mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/matplotlib-users
------------------------------------------------------------------------------
The Next 800 Companies to Lead America's Growth: New Video Whitepaper
David G. Thomson, author of the best-selling book "Blueprint to a
Billion" shares his insights and actions to help propel your
business during the next growth cycle. Listen Now!
http://p.sf.net/sfu/SAP-dev2dev
_______________________________________________
Matplotlib-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/matplotlib-users