2012-07-03 111 views
1

我有一个PySide/Phonon应用程序(为Windows开发并在Windows上完美工作),我需要“移植”到Mac OSX - 我没有任何开发经验。 如果我只是运行Python文件,应用程序会按预期运行 - 当我尝试使用py2app打包它时(这是我需要做的),会出现问题。如何在Mac OSX下打包PySide/Phonon应用程序?

如果我按原样离开生成的.app,Phonon不起作用,因为它无法加载所需的phonon_backend;如果我将插件路径添加到qt.conf中,正如各种消息来源所建议的那样,Phonon似乎已加载(也就是说,我不再收到相应的错误消息),但我开始获取“某某库加载两次,一个将被使用,哪一个是未定义的“错误,并且该应用程序立即崩溃。

最后,如果我尝试使用macdeploy_qt工具,我会收到一条消息,提示“没有外部框架”,并且结果在功能上等同于我在不使用该工具的情况下获得的结果,除了还有几个插件在相关目录中。

任何想法/指针/教程/等?顺便说一句,我使用的PySide1.1.1 for Qt4.7,以及Python.org python二进制文件(否则py2app甚至无法开始构建独立的应用程序,看起来)。

+0

好了,看到因为我很高兴tumbleweeding周围,我会补充说我尝试使用PyInstaller,结果相同:库加载两次,应用程序不工作。 qt.conf中没有任何补救措施似乎也有帮助。 – pgcd

回答

3

我建议你这样做,就像in this tutorial

然后你只需要地方在你的主模块的顶部添加以下行:

QApplication.setLibraryPaths([os.path.join(os.environ['_MEIPASS2'], 'qt4_plugins'), os.environ['_MEIPASS2'] ]) 

对于PyInstaller> 1.5下面的代码应该改为使用:

QApplication.setLibraryPaths([os.path.join(sys._MEIPASS, 'qt4_plugins'), sys._MEIPASS]) 
+0

我想我的设置有所不同,因为我没有在我的环境中设置_MEIPASS2变量... 一些进一步的探索导致我相信问题出现在我的路径中:值为'/ Library/Frameworks/Python.framework /版本/ 2.7 /斌:/选择/ local/bin目录中:/ opt/local/sbin中中:/ opt/local/bin目录中:/ opt/local/sbin中:在/ usr/bin中:/ bin中:/ usr/sbin目录:/ sbin:/ usr/local/bin:/ usr/X11/bin' - 我怀疑第一位是什么东西...... – pgcd

+2

只是关于PyInstaller> 1.5的说明,_MEIPASS2环境变量不再存在,但被替换为sys._MEIPASS。 –

+0

我一直在寻找这个解决方案近一个星期了!真棒! :) – Hobblin