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实现得到一个给定类的虚函数
Sep 28 Python
Django框架中方法的访问和查找
Jul 15 Python
Python中的命令行参数解析工具之docopt详解
Mar 27 Python
python3将视频流保存为本地视频文件
Jun 20 Python
利用Python如何制作好玩的GIF动图详解
Jul 11 Python
python实现飞机大战游戏
Oct 26 Python
TensorFlow加载模型时出错的解决方式
Feb 06 Python
python中68个内置函数的总结与介绍
Feb 24 Python
django Layui界面点击弹出对话框并请求逻辑生成分页的动态表格实例
May 12 Python
python怎么判断素数
Jul 01 Python
Python基于xlrd模块处理合并单元格
Jul 28 Python
python3.5的包存放的具体路径
Aug 16 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的超级变量$_GET获取HTML表单(Form) 数据
2011/05/07 PHP
php中批量删除Mysql中相同前缀的数据表的代码
2011/07/01 PHP
php 解决扫描二维码下载跳转问题
2017/01/13 PHP
jQuery学习5 jQuery事件模型
2010/02/07 Javascript
javascript 事件查询综合 推荐收藏
2010/03/10 Javascript
一个JavaScript用逗号分割字符串实例
2014/09/22 Javascript
JQuery实现的购物车功能(可以减少或者添加商品并自动计算价格)
2015/01/13 Javascript
仿JQuery输写高效JSLite代码的一些技巧
2015/01/13 Javascript
JQuery中使文本框获得焦点的方法实例分析
2015/02/28 Javascript
jQuery+PHP实现动态数字展示特效
2015/03/14 Javascript
jquery实现Li滚动时滚动条自动添加样式的方法
2015/08/10 Javascript
js获取对象、数组的实际长度,元素实际个数的实现代码
2016/06/08 Javascript
js数组去重的hash方法
2016/12/22 Javascript
JavaScrpt判断一个数是否是质数的实例代码
2017/06/11 Javascript
vue-cli如何添加less 以及sass
2017/07/06 Javascript
在vue项目中,使用axios跨域处理
2018/03/07 Javascript
Vue.js实现数据响应的方法
2018/08/13 Javascript
Vue2.0+Vux搭建一个完整的移动webApp项目的示例
2019/03/19 Javascript
vue实现todolist基本功能以及数据存储功能实例详解
2019/04/11 Javascript
Vue.use()在new Vue() 之前使用的原因浅析
2019/08/26 Javascript
对Python新手编程过程中如何规避一些常见问题的建议
2015/04/01 Python
详解Django框架中用context来解析模板的方法
2015/07/20 Python
Python中列表list以及list与数组array的相互转换实现方法
2017/09/22 Python
HTML5实现的图片无限加载的瀑布流效果另带边框圆角阴影
2014/03/07 HTML / CSS
HTML5跳转小程序wx-open-launch-weapp的示例代码
2020/07/16 HTML / CSS
预订从美国飞往印度的机票:MyTicketsToIndia
2017/05/19 全球购物
Homestay中文官网:全球寄宿家庭
2018/10/18 全球购物
德国2018年度最佳在线药房:Bodfeld Apotheke
2019/11/04 全球购物
自荐信的两点禁忌
2013/10/30 职场文书
中医药大学毕业生自荐信
2013/11/08 职场文书
电力公司个人求职信范文
2014/02/04 职场文书
中专毕业生个人职业生涯规划
2014/02/19 职场文书
全国优秀教师事迹材料
2014/08/26 职场文书
有限责任公司股东合作协议书范本
2014/10/30 职场文书
2015年公司国庆放假通知
2015/07/30 职场文书
古诗之爱国古诗5首
2019/09/20 职场文书