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 相关文章推荐
Python对两个有序列表进行合并和排序的例子
Jun 13 Python
Python中的迭代器漫谈
Feb 03 Python
Python实现批量更换指定目录下文件扩展名的方法
Sep 19 Python
详解python中的装饰器
Jul 10 Python
Python多进程入门、分布式进程数据共享实例详解
Jun 03 Python
python字符串切割:str.split()与re.split()的对比分析
Jul 16 Python
python3 深浅copy对比详解
Aug 12 Python
pytorch 自定义数据集加载方法
Aug 18 Python
简单了解Python3 bytes和str类型的区别和联系
Dec 19 Python
Python编译为二进制so可执行文件实例
Dec 23 Python
pycharm中如何自定义设置通过“ctrl+滚轮”进行放大和缩小实现方法
Sep 16 Python
详解win10下pytorch-gpu安装以及CUDA详细安装过程
Jan 28 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初学者头疼问题总结
2006/07/08 PHP
PHP文本操作类
2006/11/25 PHP
php正则表达匹配中文问题分析小结
2012/03/25 PHP
PHP读取txt文本文件并分页显示的方法
2015/03/11 PHP
php header函数的常用http头设置
2015/06/25 PHP
WordPress中给文章添加自定义字段及后台编辑功能区域
2015/12/19 PHP
php支持断点续传、分块下载的类
2016/05/02 PHP
thinkPHP5框架实现基于ajax的分页功能示例
2018/06/12 PHP
PHP+swoole+linux实现系统监控和性能优化操作示例
2019/04/15 PHP
php 下 html5 XHR2 + FormData + File API 上传文件操作实例分析
2020/02/28 PHP
js获取客户端网卡的IP地址、MAC地址
2014/03/26 Javascript
全面解析Bootstrap排版使用方法(标题)
2015/11/30 Javascript
JavaScript+html5 canvas制作的百花齐放效果完整实例
2016/01/26 Javascript
使用Vue.js创建一个时间跟踪的单页应用
2016/11/28 Javascript
Vue 让元素抖动/摆动起来的实现代码
2018/05/31 Javascript
微信小程序实现即时通信聊天功能的实例代码
2018/08/17 Javascript
详解Vue2.5+迁移至Typescript指南
2019/08/01 Javascript
JavaScript 禁止用户保存图片的实现代码
2020/04/28 Javascript
[20:30]职业巡回赛回顾
2018/08/09 DOTA
Python遍历目录中的所有文件的方法
2016/07/08 Python
TensorFlow如何实现反向传播
2018/02/06 Python
NumPy 数组使用大全
2019/04/25 Python
Python实现简单的列表冒泡排序和反转列表操作示例
2019/07/10 Python
Django之模板层的实现代码
2019/09/09 Python
.img/.hdr格式转.nii格式的操作
2020/07/01 Python
python正则表达式 匹配反斜杠的操作方法
2020/08/07 Python
Python 远程开关机的方法
2020/11/18 Python
思想品德自我评价
2014/02/04 职场文书
教师职称自我鉴定
2014/02/12 职场文书
合作协议书范本
2014/10/25 职场文书
中学生旷课检讨书500字
2014/10/29 职场文书
我爱我班主题班会
2015/08/13 职场文书
四则混合运算教学反思
2016/02/23 职场文书
python实战之用emoji表情生成文字
2021/05/08 Python
详解Redis主从复制实践
2021/05/19 Redis
SpringBoot详解执行过程
2022/07/15 Java/Android