MACOSX下用py2app打包PYQT程序
MAC OS X 下用py2app打包PYQT程序
2011-10-13 12:03
环境:MAC OS X 10.7.1
nnd,这个破玩意整整折腾了我一个晚上,希望遇到同样问题的人少受点罪
1.安装py2app
要让py2app正常工作有一个必要的前提条件,就是所使用的python一定要单独安装,绝逼
不能用系统自带的。
py2app下载地址:安装方法:sudo python setup.py install
另外安装过程需要连接internet,会自动下载安装一些依赖包
2.使用py2app打包源代码
[1].进入源代码所在目录
[2].建立setup.py文件
使用命令“py2applet --make-setup XXXX.py”建立基本格式 [3].修改setup.py
例子:
"""
This is a setup.py script generated by py2applet
Usage:
python setup.py py2app
"""
from setuptools import setup
APP = ['utc2time.py']
DATA_FILES = ['utc2time_ui.ui','utc2time_ui.py','pythonlogo.png','qt.conf'] OPTIONS = {'argv_emulation': 0,
'optimize': 2,
'includes': ['sip', 'PyQt4._qt', 'PyQt4.QtCore', 'PyQt4.QtGui'],
'excludes': ['PyQt4.QtDesigner', 'PyQt4.QtNetwork', 'PyQt4.QtOpenGL', 'PyQt4.QtScript',
'PyQt4.QtSql', 'PyQt4.QtTest', 'PyQt4.QtWebKit', 'PyQt4.QtXml', 'PyQt4.phonon']
}
setup(
app=APP,
data_files=DATA_FILES,
options={'py2app': OPTIONS},
setup_requires=['py2app'],
)
其中,APP项为要打包的程序名,DATA_FILES为需要被调用的资源文件,OPTIONS中定义了所需使用的库
[4]打包
使用“python setup.py py2app“命令进行打包,打包好的程序保存在dist目录中
3.问题及解决方法
问题1:打包好的程序执行报错 "ImportError: No module named _qt"
解决方法:在setup.py文件OPTIONS中加入PyQt4._qt项,如
OPTIONS = {'argv_emulation': False,'includes':['sip', 'PyQt4', 'PyQt4.QtGui', 'PyQt4.QtCore',
'PyQt4._qt']}
问题2:打包好的程序执行时崩溃,弹出报错窗口,内容如下:
On Mac OS X, you might be loading two sets of Qt binaries into the same process. Check that all plugins are compiled against the right Qt binaries. Export DYLD_PRINT_LIBRARIES=1 and check
that only one set of binaries are being loaded.
QObject::moveToThread: Current thread (0×13b11f40) is not the object’s thread (0×1e8760).
解决方法:在目录dist/XXXX.app/Contents/Resources中新建一个名为qt.conf的空文件,或者也可以先建好一个然后在setup.py中作为资源include。
本文档为【MACOSX下用py2app打包PYQT程序】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。