如何在Mac OS X上获取py2app打包的Python应用的系统默认语言/区域?
我写了一个简单的wxPython应用程序,然后用py2app打包成一个可以双击打开的.app文件,这样我就可以把它给别人使用了。
我的应用程序使用了一些特定地区的设置——具体来说,它需要解析文本形式的日期,所以它允许用户选择使用哪个地区设置,并且调用locale.getdefaultlocale()来预先填充这个选择。
我通过直接运行Python代码(使用系统自带的Python,而不是打包后的版本)来测试这个功能,结果一切正常。然后我用py2app打包后,测试了生成的自包含应用程序,使用“open dist/foo.app”命令,结果也很好。接着我把它给了别人,他们却抱怨说一打开就出现了错误;我尝试在Finder中双击我的.app文件,结果发现locale.getdefaultlocale()确实返回了None(这个错误是因为我在这个对象上调用了方法)。
我写了一个简单的测试应用程序,用来输出环境变量和locale.getdefaultlocale()的值,并在同样的三种环境中运行。结果如下: - 从终端直接运行“python envdump.py”:输出了我完整的环境变量 - 用py2app打包后,从终端运行“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()的情况,但我想以某种方式获取这些信息。