pyqt5打包成exe可执行文件的方法
作者:ayiya_Oese 发布时间:2022-02-09 11:25:57
本文内容会引起杀毒软件的莫名兴奋,建议先安抚杀毒软件,让杀毒软件先休息一下再继续操作
安装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
单文件
启动之后选择对应文件,先试试单文件,选择基于窗口
对应的命令是:
pyinstaller --noconfirm --onefile --windowed --icon "D:/01ubuntu/Icon.ico" "D:/01ubuntu/center.py"
因为不基于控制台启动则需要依赖于bootloader,找不到bootloader就会报错:
选择基于控制台,也就是启动的时候会弹出终端黑窗口
对应生成的命令:
pyinstaller --noconfirm --onefile --console --icon "D:/01ubuntu/Icon.ico" "D:/01ubuntu/center.py"
运行成功,生成的exe文件在ouput文件下:
双击center.exe会看到弹出一个黑框,接着pyqt界面就会出来,但是有点慢。
编译成功,只是这个黑窗口有点难看
单目录
对应命令:
pyinstaller --noconfirm --onedir --console --icon "D:/01ubuntu/Icon.ico" "D:/01ubuntu/center.py"
生成的结果不再是单个exe文件,而是一个文件夹,里面包含了启动center.py需要的各种子文件
里面依旧包含了center.exe可执行文件,但是可以发现,现在的exe笑了很多,因为其他部分变成了可见的文件,双击依旧可以打开,而且,这次的启动速度明显快了很多。
完整项目
前面的测试是单个.py文件的的项目,但是实际项目中,一般都不会只是一个文件,而是由很多文件和文件夹,可以通过附加文件
添加,这里我的整个工程都在myApp
中,主程序是main.py
被调用程序是UI_mainWin.py
对应命令:
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
在编译的时候,杀毒软件很开心的跟我报告他抓到了小偷,结果打开一看,前面的坑竟然是这个邀功的杀毒软件挖的。
点击找回原文件
进入他家,发现我要的东西全被杀毒软件锁在小房间
勾选之后点击恢复所选
解救大家,还好这些文件还没遭受酷刑
送他们回到他们原本该去的地方
TODO
将编译结果转成可安装文件
总结
二话不说,先关杀毒软件
配好环境,先跑代码,这是编译的基础
编译结果单文件:保密性好,但是慢
编译结果多文件:比较快
无控制台需要有pre-compiled bootloader
其他文件可以通过附加文件添加
来源:https://blog.csdn.net/ayiya_Oese/article/details/116748085
猜你喜欢
- // 和PHP一样的时间戳格式化函数// @param {string} format 格式
- google 的设计原则中文1.易用性-聚焦在人,方便他们的生活,工作,梦想。2.速度-分秒必争3.简单-简单而强有力4.关联性- 对初学者
- Python3将数据保存为txt文件的方法,具体内容如下所示:f = open("data/model_Weight.txt&qu
- 我就废话不多说了,还是直接看代码吧!import osimport timeimport mmapfilename = 'test.
- 本文较为详细的分析了Python解释执行的原理,对于深入理解Python可以起到一定的帮助作用。具体分析如下:首先,这里的解释执行是相对于编
- 第一种方法:在php.ini文件里改变display_errors和error_reporting的值,没有的直接加上; 第一处修改; di
- 初学ASP,程序是能勉强写出来了,但若每进行一次网站页面的改版,所有的源程序都将进行一次移植手术。为此所耗费的人力精力不计其数,甚至一不小心
- 什么是JSON http://www.json.org/json-zh.htmlJSON(Javascript Object Notatio
- pygame城市之战横版射击游戏,按上下左右方向箭头操作飞机。这是一个横板射击小游戏,在黑夜的城市上空,你将要操作一架飞机去射击敌机, * 效
- 您是否记得关闭所有的XHTML元素,在HTML中一些元素没有必要被关闭。当下一个元素开始的时候,上一个元素就自动被关闭。XHTML中是不允许
- 维护是什么,维护就是修改,不断的修改,但是要保证你的html和css有清晰的版本界定,有扩展性,不要因为做的太死而重新去做这个页面。一个赚钱
- 有两张表a表id val 1 a 2 b 3 c 4 d 5 e b表 a_id val 1 null 2 null 3 null 4 nu
- 场景需求:需要在Flask服务器的本地找一张图片返回给前端展示出来。问题疑点:通常前端的<img>标签只会接受url的形式来展示
- 多线程锁lock=threading.Lock()使用疑问多线程任务是同时执行的,如果我们需要先执行线程a,再执行线程b,需要怎么办呢?解决
- 一、Matplotlib简介与安装Matplotlib也就是Matrix Plot Library,顾名思义,是Python的绘图库。它可与
- 我就废话不多说了,大家还是直接看代码吧!stdi, stdo, stde = sys.stdin, sys.stdout, sys.stde
- 多个Python版本:在同一台机器上安装不同的Python,例如2.7和3.4。虚拟环境:独立的环境,既可以同时安装特定版本的Python,
- 当我们使用访问一个没有声明的变量时,JS会报错;而当我们给一个没有声明的变量赋值时,JS不会报错误,相反它会认为我们是要隐式申明一个全局变量
- 最近没事,写了个在项目经常要取城市或省份名的方法,所以改成了一个类.方便以后调用//****************************
- 基本思路使用GDAL创建Shapefile数据的基本步骤如下:使用osgeo.ogr.Driver的CreateDataSource()方法