pyqt5打包成exe可执行文件的方法


Posted in Python onMay 14, 2021

本文内容会引起杀毒软件的莫名兴奋,建议先安抚杀毒软件,让杀毒软件先休息一下再继续操作

安装python3.6

转exe会遇到很多问题,其中部分是由于python版本不合适引起的,如果可以,尽量用3.5或3.6版本。

在Windows上安装python3.6.8

安装时勾选Add to path选项添加到环境变量

打开终端查看版本:

python -V
pip -V

准备工作

安装包:

pip isntall pyinstaller
pip install auto-py-to-exe
pip install pyqt5

如果代码中有其他依赖包也要对应安装好,要是编译成功后,打开之后程序直接死掉,很可能就是依赖包没装好

创建python文件center.py

# center.py
import sys
from PyQt5.QtWidgets import QWidget, QDesktopWidget, QApplication
 
class Example(QWidget):
    
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):               
        self.resize(250, 150)
        self.center()
        self.setWindowTitle('Center')    
        self.show()
        
    #控制窗口显示在屏幕中心的方法    
    def center(self):
        #获得窗口
        qr = self.frameGeometry()
        #获得屏幕中心点
        cp = QDesktopWidget().availableGeometry().center()
        #显示到屏幕中心
        qr.moveCenter(cp)
        self.move(qr.topLeft())

if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())

运行python center.py可以看到在屏幕中心的窗口,说明代码没问题,这一步很有必要,要是代码跑不起来,编译也没有作用。

编译

pyinstaller不是交叉编译器,exe要在Windows上运行,只能在Windows上编译。

pyinstaller将python代码编译为exe可执行文件在Windows上使用

Python:3.6-3.9
pip install pyinstaller

auto-py-to-exe通过可视化界面使用pyinstaller

Python : 3.5-3.9
pip install auto-py-to-exe
auto-py-to-exe

启动auto-py-to-exe

auto-py-to-exe

单文件

启动之后选择对应文件,先试试单文件,选择基于窗口

pyqt5打包成exe可执行文件的方法

对应的命令是:

pyinstaller --noconfirm --onefile --windowed --icon "D:/01ubuntu/Icon.ico"  "D:/01ubuntu/center.py"

因为不基于控制台启动则需要依赖于bootloader,找不到bootloader就会报错:

pyqt5打包成exe可执行文件的方法

选择基于控制台,也就是启动的时候会弹出终端黑窗口

pyqt5打包成exe可执行文件的方法

对应生成的命令:

pyinstaller --noconfirm --onefile --console --icon "D:/01ubuntu/Icon.ico"  "D:/01ubuntu/center.py"

运行成功,生成的exe文件在ouput文件下:

pyqt5打包成exe可执行文件的方法

双击center.exe会看到弹出一个黑框,接着pyqt界面就会出来,但是有点慢。

pyqt5打包成exe可执行文件的方法

编译成功,只是这个黑窗口有点难看

pyqt5打包成exe可执行文件的方法

单目录

pyqt5打包成exe可执行文件的方法

对应命令:

pyinstaller --noconfirm --onedir --console --icon "D:/01ubuntu/Icon.ico"  "D:/01ubuntu/center.py"

生成的结果不再是单个exe文件,而是一个文件夹,里面包含了启动center.py需要的各种子文件

pyqt5打包成exe可执行文件的方法

里面依旧包含了center.exe可执行文件,但是可以发现,现在的exe笑了很多,因为其他部分变成了可见的文件,双击依旧可以打开,而且,这次的启动速度明显快了很多。

pyqt5打包成exe可执行文件的方法

完整项目

前面的测试是单个.py文件的的项目,但是实际项目中,一般都不会只是一个文件,而是由很多文件和文件夹,可以通过附加文件添加,这里我的整个工程都在myApp中,主程序是main.py被调用程序是UI_mainWin.py

pyqt5打包成exe可执行文件的方法

对应命令:

pyinstaller --noconfirm --onedir --console --icon "D:/01ubuntu/myApp/Icon.ico" --add-data "D:/01ubuntu/myApp/Ui_mainWin.py;." --add-data "D:/01ubuntu/myApp/images;images/"  "D:/01ubuntu/myApp/main.py"

解决找不到bootloader

在编译的时候,杀毒软件很开心的跟我报告他抓到了小偷,结果打开一看,前面的坑竟然是这个邀功的杀毒软件挖的。

pyqt5打包成exe可执行文件的方法

点击找回原文件进入他家,发现我要的东西全被杀毒软件锁在小房间

pyqt5打包成exe可执行文件的方法

勾选之后点击恢复所选解救大家,还好这些文件还没遭受酷刑

pyqt5打包成exe可执行文件的方法

送他们回到他们原本该去的地方

pyqt5打包成exe可执行文件的方法

TODO

将编译结果转成可安装文件

总结

  •  二话不说,先关杀毒软件
  • 配好环境,先跑代码,这是编译的基础
  • 编译结果单文件:保密性好,但是慢
  • 编译结果多文件:比较快
  • 无控制台需要有pre-compiled bootloader
  • 其他文件可以通过附加文件添加

到此这篇关于pyqt5转为exe可执行文件的方法的文章就介绍到这了,更多相关pyqt5转为exe可执行文件 内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
PyQt5每天必学之弹出消息框
Apr 19 Python
Python基于百度AI的文字识别的示例
Apr 21 Python
利用Python写一个爬妹子的爬虫
Jun 08 Python
编写多线程Python服务器 最适合基础
Sep 14 Python
关于Django ForeignKey 反向查询中filter和_set的效率对比详解
Dec 15 Python
Python学习笔记之迭代器和生成器用法实例详解
Aug 08 Python
python opencv实现信用卡的数字识别
Jan 12 Python
wxPython修改文本框颜色过程解析
Feb 14 Python
Python HTMLTestRunner库安装过程解析
May 25 Python
没编程基础可以学python吗
Jun 17 Python
Python fileinput模块如何逐行读取多个文件
Oct 05 Python
详解Python中的Lock和Rlock
Jan 26 Python
Python 机器学习工具包SKlearn的安装与使用
python process模块的使用简介
May 14 #Python
django学习之ajax post传参的2种格式实例
May 14 #Python
Python djanjo之csrf防跨站攻击实验过程
python控制台打印log输出重复的解决方法
聊一聊python常用的编程模块
May 14 #Python
如何获取numpy array前N个最大值
May 14 #Python
You might like
单台服务器的PHP进程之间实现共享内存的方法
2014/06/13 PHP
Laravel访问出错提示:`Warning: require(/vendor/autoload.php): failed to open stream: No such file or di解决方法
2019/04/02 PHP
php利用array_search与array_column实现二维数组查找
2019/07/08 PHP
JavaScript 事件参考手册
2008/12/24 Javascript
ExtJs中简单的登录界面制作方法
2010/08/19 Javascript
xml文档转换工具,附图表例子(hta)
2010/11/17 Javascript
jqPlot 基于jquery的画图插件
2011/04/26 Javascript
Jquery下:nth-child(an+b)的使用注意
2011/05/28 Javascript
读jQuery之六 缓存数据功能介绍
2011/06/21 Javascript
原生javascript实现的分页插件pagenav
2014/08/28 Javascript
2014 年最热门的21款JavaScript框架推荐
2014/12/25 Javascript
js实现下拉列表选中某个值的方法(3种方法)
2015/12/17 Javascript
JavaScript实现点击文本自动定位到下拉框选中操作
2016/06/15 Javascript
关于验证码在IE中不刷新的快速解决方法
2016/09/23 Javascript
ajax实现加载页面、删除、查看详细信息 bootstrap美化页面!
2017/03/14 Javascript
Angular 通过注入 $location 获取与修改当前页面URL的实例
2017/05/31 Javascript
Vue中在新窗口打开页面及Vue-router的使用
2018/06/13 Javascript
Vue项目部署在Spring Boot出现页面空白问题的解决方案
2018/11/26 Javascript
jQuery实现的隔行变色功能【案例】
2019/02/18 jQuery
vue.js中使用echarts实现数据动态刷新功能
2019/04/16 Javascript
使用axios请求接口,几种content-type的区别详解
2019/10/29 Javascript
基于vue实现微博三方登录流程解析
2020/11/04 Javascript
Python装饰器原理与基本用法分析
2020/01/07 Python
Keras官方中文文档:性能评估Metrices详解
2020/06/15 Python
pycharm配置python 设置pip安装源为豆瓣源
2021/02/05 Python
Html5+JS实现手机摇一摇功能
2015/04/24 HTML / CSS
德国足球商店:OUTFITTER
2019/05/06 全球购物
小学教育毕业生自荐信
2013/11/18 职场文书
煤矿安全承诺书
2014/05/22 职场文书
学生安全承诺书
2014/05/22 职场文书
银行求职信
2014/05/31 职场文书
建筑安全标语
2014/06/07 职场文书
教师拔河比赛广播稿
2014/10/14 职场文书
车辆安全隐患排查制度
2015/08/05 职场文书
清明扫墓感想
2015/08/11 职场文书
初中地理教学反思
2016/02/19 职场文书