我写了一个简单的wxPython应用程序,我用py2app打包,把它变成一个自包含的双击.app包,我可以把它给别人来运行。
我的应用程序使用一些特定于语言环境的设置 - 具体来说,它希望以文本形式解析日期 - 因此它允许用户指定要使用的语言环境,并调用locale.getdefaultlocale()来预先填充此选项。 / p>
我通过直接运行python代码测试了这个(在系统安装的Python中,没有打包)并且运行正常,然后我用py2app打包它并用“open dist / foo.app”测试生成的自包含应用程序“它工作得很好。然后我把它交给别人,他们抱怨它立即抛出异常;我尝试在Finder中双击我的.app并且看,locale.getdefaultlocale()确实返回None(由于我在该对象上进行方法调用而导致异常)。
我编写了一个简单的测试应用程序来转储环境和locale.getdefaultlocale()的值,并在相同的3个环境中运行它。结果: - 直接从终端调用“python envdump.py”:转储我的完整环境 - 使用py2app打包,从Terminal调用“open dist / envdump.app”:转储我的完整环境 - 通过从Finder打开它来调用相同的dist / envdump.app:环境更加有限,是的,locale.getdefaultlocale()返回(None,None),因为LANG未设置。
Finder设置的环境变量的完整列表是:ARGVZERO,Apple_PubSub_Socket_Render,COMMAND_MODE,DISPLAY,EXECUTABLEPAT,HOME,LOGNAME,PATH,PYTHONPATH,RESOURCEPATH,SHELL,SSH_AUTH_SOCK,TMPDIR,USER,__ CF_USER_TEXT_ENCODING。
我可以轻松地让我的代码容忍缺少LANG / locale.getdefaultlocale(),但我想以某种方式获取该信息。