【Python】pyinstaller打包百科全书
创始人
2024-04-04 03:19:41
0

前言

记录pyinstaller打包中的常用命令和报错。

详细的还是去官网自己看吧,这里只记录打包中常用到的命令。
如果我这里帮助不到你, 官网在这里:https://github.com/pyinstaller/pyinstaller

这两篇文章基本覆盖100%的报错了,
参考这里: https://hackmd.io/@quency/B1QmM5-OD
还有这里:https://www.pythonguis.com/tutorials/packaging-pyqt5-pyside2-applications-windows-pyinstaller/

知识点📖📖

安装模块

pip install pyinstaller

查看命令,如何使用

pyinstaller -h

在这里插入图片描述

在这里插入图片描述

注意图中圈出来的 What to genereteWindows and Mac OS X specific options,用的比较多的也就只有它们

options解释
-F打包成一个文件捆绑的可执行文件(默认打包为一个文件夹,不建议
-n、–name指定名称打包程序名称(默认值为脚本的基本名称)
–add-data添加文件或文件夹(注意看格式要求
-w不显示控制台窗口
-i指定.exe程序的图标

这些命令都可以组合使用!!!


实现

具体的命令使用以下命令进行查看

pyinstaller -h

打包要略

这里展示多种打包的方式,看似多种,实际上是一种。
通用的命令是

pyinstaller scripts.py

现在脚本名为demo.py,则输入 pyinstller demo.py,如下动图所示

打包成功后,(因为没有指定路径) 会在当前文件夹下生成一些文件和文件夹

  • 除了红色框选出来的文件外,其他的都是pyinstaller生成的。
  • 接下来就可以在 dist -> demo,找到 demo.exe,就可以运行了

在这里插入图片描述

基础打包

demo.py

# -*- coding: utf-8 -*-
for i in range(10):_str = input('输入任意内容: ')print(_str)

在命令行中输入:pyinstaller demo.py,等待打包完成;

接着打开 dist -> demo,找到 demo.exe,双击运行它,效果如下图所示

通过上面可以发现,默认生成的 .exe 文件,带有

  • 控制台窗口
  • .exe 执行程序在文件夹里面
  • 默认ico图标

值得注意的是,这里 .exe是无法脱离当前文件夹执行的,这个非常不好。;我更偏爱于生成单个可执行的 .exe,所以后面生成单个可执行文件。


单个执行文件 & 去除控制台窗口

有些程序,并不需要控制台窗口

上面说到,通过

  • -F:指定单个执行文件,
  • -w:去除控制台窗口

demo.py

  • 这段代码执行后会生成以当前年月日时分秒命名的.txt文件
import datetimeexec_time = datetime.datetime.now().strftime('%Y%m%d%H%M%S')with open(file=f'{exec_time}.txt', mode='w', encoding='utf-8') as f:f.write('hello world!')

在命令行中输入:pyinstaller demo.py -F -w,等待打包完成;

接着打开 dist,找到 demo.exe,双击运行它,效果如下图所示

通过上面可以发现,文件没有是单个可执行文件,且不会弹出控制台窗口了。


指定ico图标 & 任务栏图标

.exe加上一个好看的图标,不使用默认的图标。.exe图标跟任务栏图标一致。

demo.py

# -*- coding: utf-8 -*-
for i in range(10):_str = input('输入任意内容: ')print(_str)

在命令行中输入:pyinstaller demo.py -F -i demo.ico,等待打包完成;

接着打开 dist,找到 demo.exe,可以看到.exe的图标和指定的ico是一致的。

  • demo.ico 在这里是一张16×16像素的ico图。

运行效果如下图所示:

  • 可以看到,任务栏的图标也是改变了的。

在这里插入图片描述

Qt 指定任务栏图标

譬如在打包 pyside2、pyqt5GUI程序时候,
有时候用上述的命令,.exe的图标并不会作用于任务栏,则使用以下的代码。

  • 将这段代码放置在最前面,然后使用setWindowIcon()设置好.exe的图标,后面任务栏的图标就会跟随 .ico了。
# 任务栏ico与工具左上角ico同步
try:# Only exists on Windows.from ctypes import windllmyappid = 'mycompany.myproduct.subproduct.version'windll.shell32.SetCurrentProcessExplicitAppUserModelID(myappid)
except ImportError:passif __name__ == '__main__':basedir = os.path.dirname(__file__)# 窗口按照dpi拉伸QApplication.setAttribute(Qt.AA_EnableHighDpiScaling)app = QApplication(sys.argv)# 设置ico,绝对路径指定路径或相对路径都可以app.setWindowIcon(QtGui.QIcon("C:\Users\John\Desktop\demo.ico"))...

后话

本次分享就到这里,🐱‍🏍🐱‍🏍
see you~

相关内容

热门资讯

吉利起诉欣旺达,理想汽车躺枪? 想象一下,我从你这里采购电池,还替你宣传,结果因为你的质量问题让大家质疑我,这是一种什么感受? 1...
獐子岛:近12个月新增累计诉讼... 12月29日,獐子岛(002069)发布公告,截止到公告披露日,公司及控股子公司在最近十二个月内累计...
政策迎重大调整!概念股集体飙涨... 12月29日,A股市场主要股指震荡走势,沪指收盘微涨0.04%,录得九连阳。从板块上来看,数字人民币...
福石控股累计诉讼仲裁1792万... 12月29日,福石控股(300071)发布公告,截至公告披露日前,公司及子公司在过去十二个月内的累计...
犯罪收益达14.6亿韩元,享有... 金建希利用总统夫人身份,收受大量财物,并广泛介入了各种人士安排,“甚至可以称得上是现代卖官卖职”,韩...
金评天下丨“长钱长投”制度环境... 金融投资报评论员 刘柯 中国人民银行于12月26日发布《中国金融稳定报告(2025)》(以下简称《金...
偷拿自己快递再退款不是“薅羊毛... 网购下单付款,待快递到站后秘密取走,再以“未收到货”申请退款,这样的行为看似钻了“空子”,实则已触犯...
全球瞭望丨美媒集体抨击特朗普政... 新华社洛杉矶12月28日电(记者黄恒)美国加利福尼亚州多家地方媒体28日集体刊登同一篇社论,抨击特朗...
一个假律师凭啥“拿捏”酒企? ... 打着“维权”的幌子,干着敲诈的勾当,事后还要签订“法律服务”合同……江苏宿迁一名假律师专门敲诈酒企,...