[Pythonmac-SIG] Environment variable issues running py2app application

Ned Deily nad at acm.org
Wed Apr 24 20:29:53 CEST 2013


In article 
<CACgdh2jujjuvueKOXpr2e4utJe3ZdYad8OX9JCFFpLhgHbXAKA at mail.gmail.com>,
 Paul Wiseman <poalman at gmail.com> wrote:
> I've never seen this problem before but one user seems to be experiencing
> this issue and I'm at a bit of a loss as to what the cause could be
> 
> One part of the app runs this: subprocess.Popen(['/usr/bin/env',
> 'system_profiler', 'SPUSBDataType', '-xml'])
> 
> I've never seen a problem running this, however in one users logs it's
> returning: env: system_profiler: No such file or directory
> 
> So I thought that maybe their PATH variable doesn't include path to the
> binary, I asked them to provide the output of '/usr/bin/env' and 'which
> system_profiler'
> 
> 'which system profiler' returned '/usr/sbin/system_profiler' and
> '/usr/sbin' was in their PATH variable that returned from /usr/bin/env, so
> I don't really get what's going on.
> 
> This also looks like it only happens if the user opens the .app directly,
> but if they open the binary directly in the .app/Contents/MacOS/ folder, it
> works and it can find these external binaries through subprocess.
> 
> I'm really not sure what might be causing this? and I've never experienced
> it myself when testing, nor has it ever been reported before which makes me
> inclined to believe it's some external setting / config on the users
> machine which is causing this behaviour?

Normally, a shell (like bash) is not involved in launching an OS X app 
bundle, like those produced by py2app, so the environment variables seen 
in an app's environment are not the same as what is seen from a terminal 
shell session.  Thus, the output of `which` and of the user's shell 
$PATH aren't relevant.   It used to be possible to influence to the 
user's GUI environment by supplying a ~/.MacOSX/environment.plist but I 
believe that is no longer supported on current OS X releases and, in any 
case, it's a bad idea to depend on it.  It is possible to include 
app-specific environment variables in the app's plist.  But, in your 
case, the simplest thing to do is use an absolute path to 
`system_profiler` and avoid use of `/usr/bin/env` within an app bundle.

-- 
 Ned Deily,
 nad at acm.org



More information about the Pythonmac-SIG mailing list