如何在Mac OS X上获取py2app打包的Python应用的系统默认语言/区域?

0 投票
1 回答
1923 浏览
提问于 2025-04-16 10:09

我写了一个简单的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()的情况,但我想以某种方式获取这些信息。

1 个回答

1

当你通过双击应用程序来启动它时,环境变量的值和在终端窗口中运行时是不一样的。你可以通过创建一个叫做 ~/.MacOSX/environment.plist 的文件来指定这些变量,想了解更多可以查看这里。不过,这可能不是你想要的做法。如果你需要为你的应用程序设置一个默认值,可以按照这里的说明,把它添加到应用程序的plist文件中。

撰写回答