[PyQt5+Py2exe+Python2.7.14]打包exe遇到的坑
1.打包时找不到MSVCP90.dll报错
解决:打包脚本选项添加”dll_excludes”: [“MSVCP90.dll”,]
# -*- coding: utf-8 -*-
from distutils.core import setup
import py2exe
options = {"py2exe":{"compressed": 9, #压缩
"optimize": 2,
"dll_excludes": ["MSVCP90.dll",] # 打包Qt需要
}}
setup(
console=["slottest.py"],
options=options,
zipfile=None)
2.初始化时提示no module name sip
解决:在窗体的python文件内显式声明导入PyQt5下的sip包
from PyQt5 import QtCore, QtGui, QtWidgets
import sys
from PyQt5 import sip # 解决找不到的包问题
class Ui_Form(object):
def setupUi(self, Form):
3.运行时报错could not find or load the Qt platform plugin “windows”
这个坑惨了我,网上有提供解决办法:
把pyqt5的插件目录如D:\Python27\Lib\site-packages\PyQt5\plugins下的platforms文件夹连同里面的内容一起拷贝到导出exe同目录的地方(考虑可移植性,推荐这种方式),或者添加一个环境变量:
变量名QT_QPA_PLATFORM_PLUGIN_PATH
值例如D:\Python27\Lib\site-packages\PyQt5\plugins\platforms
我这样做了以后,还是会报错,搜索好久,在*的一个角落看到
Copy C:\Python34\Lib\site-packages\PyQt5\libEGL.dll to the same directory as your .exe.
Source: http://bird1110.blogspot.com/2014/04/python-33-pyqt5-and-cxfreeze-exe-on-64.html
遂将PyQt5包目录下的libEGL.dll也复制到exe文件所在路径,之后终于运行成功。
注意,在我这里如果bundle为一个文件,会在运行时不显示窗口,选择非bundle模式才可以打包成功。
如果不想看到运行时的命令行黑框,只想看到界面本身,则setup.py脚本里的console-改为windows=即可
顺便吐槽下这么个小窗体打下来要60多MB= =
上一篇: sublime_text3配置python开发环境
下一篇: PyQt异步动态添加控件