[Pythonmac-SIG] Fwd: Re: py2app and stripped os.environ

Christopher Barker Chris.Barker at noaa.gov
Tue Mar 15 18:37:24 CET 2011


Re-posting -- for some reason this didn't seem to show up in the list.

-Chris


-------- Original Message --------
Subject: Re: [Pythonmac-SIG] py2app and stripped os.environ
Date: Tue, 15 Mar 2011 13:09:28 -0400
From: Ronald Oussoren <ronaldoussoren at mac.com>
To: Christopher Barker <Chris.Barker at noaa.gov>
CC: pythonmac-sig at python.org


On 15 Mar, 2011, at 11:57, Christopher Barker wrote:

> On 3/15/11 6:11 AM, Ronald Oussoren wrote:
>>> Once deployed as .app using py2app, I am not getting all the env vars that are
>>> available to users.
>
>> That's on OSX issue, and not a problem in py2app.  Most of the environment variables you see from the command-line are initialized by the shell and/or Terminal.app and are not available to GUI applications. You'd see the same issue with a native application.
>
> Indeed, and we did explain that to the OP on the wxPython list.

It would have been nice if he'd mentioned that in his post here.

>
> However, it seems that it is fairly common that folks write applications that call command line utilities. In this case, they need the environment to be set up the way that it is in the user's default shell. I suggest that it might be nice to have an option for py2app to build an app that will initialize the environment that a user would see in their standard shell.

That is non-trivial, especially when the user has specified a different 
shell in the Terminal preferences.  To get the right environment you'd 
probably have to:

* Reverse engineer the default shell created by Terminal.app
* Parse the environment plist file (I don't recall the name, but have an 
PyObjC example that uses is)
* Run 'login -f USER' in a subprocess, then run the "env" command using 
that shell

All of this should be done in a bootstrap script (in py2app), and code 
should then be added to the distutils command to ensure that the script 
gets included when an option is specified (lets say, 
"--emulate-shell-environment")

All of this is definitely possible, but I don't know when I'll get 
around to doing it.

If someone can write a function that fetches the information I can 
easily integrate it into py2app. This should be a function that takes no 
arguments and updates os.environ, something like:

.. def _emulate_shell_environment():
..     import os
..     os.environ['KEY'] = 'value'

BTW. I've filed issue #15 for this, to ensure the request doesn't get 
lost 
(<https://bitbucket.org/ronaldoussoren/py2app/issue/15/py2app-should-have-way-to-emulate-shell>)

Ronald


-- 
Christopher Barker, Ph.D.
Oceanographer

Emergency Response Division
NOAA/NOS/OR&R            (206) 526-6959   voice
7600 Sand Point Way NE   (206) 526-6329   fax
Seattle, WA  98115       (206) 526-6317   main reception

Chris.Barker at noaa.gov


More information about the Pythonmac-SIG mailing list