欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

[PyQt5+Py2exe+Python2.7.14]打包exe遇到的坑

程序员文章站 2022-05-28 12:07:39
...

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文件所在路径,之后终于运行成功。

[PyQt5+Py2exe+Python2.7.14]打包exe遇到的坑

注意,在我这里如果bundle为一个文件,会在运行时不显示窗口,选择非bundle模式才可以打包成功。
如果不想看到运行时的命令行黑框,只想看到界面本身,则setup.py脚本里的console-改为windows=即可

顺便吐槽下这么个小窗体打下来要60多MB= =

相关标签: PyQt