Python打包成exe
发布于 4 个月前
python文件打包成exe
最近有想法把先前写的一些自动化脚本优化,优化后想到了不然直接写成带界面的可执行文件,于是有了该片段...
所需工具
pyinstaller
安装
pip install pyinstaller
安装后验证成功
pyinstaller --version
基本使用
pyinstaller -D test.py
但通常会加一些参数来使用
常用参数
参数名 | 描述 |
---|---|
-D | 文件夹模式。在打包完成后生成一个文件夹,其中包含一个exe文件和一个包含若干依赖文件的文件夹(详见上文)。(默认) |
-F | 单文件模式。在打包完成后只会生成一个单独的exe文件(详见上文)。 |
--add-data <SRC;DEST or SRC:DEST> | 指定一个文件夹或文件(非二进制),将其嵌入到exe中。 |
--add-binary <SRC;DEST or SRC:DEST> | 和--add-data类似,不过指定的文件夹或文件是二进制的 |
-p DIR--paths DIR | 提供一个路径进行搜索并且导入里面的模块(不同的路径使用路径分隔符os.pathsep分隔开,或者多次使用这个参数)。这可以解决有时候第三方模块找不到的问题。 |
--hidden-import MODULENAME--hiddenimport MODULENAME | 需要进行额外导入的模块。当pyinstaller在程序中找不到一些模块时,需要你额外指定。这个参数可以多次使用,可以解决一些模块找不到的问题。 |
--splash IMAGE_FILE | 添加一个启动画面(图片文件)路径,在程序运行前显示指定的启动图片,起到加载提示的效果。 |
-c, --console, --nowindowed | 打包程序运行后出现一个黑色的控制台窗口(默认) |
-w, --windowed, --noconsole | 打包程序运行后隐藏控制台窗口 |
-i <FILE.ico or FILE.exe,ID or FILE.icns or Image or "NONE">--icon <FILE.ico or FILE.exe,ID or FILE.icns or Image or "NONE"> | 设置打包后exe程序的图标(只能在Windows和macOS上使用) |
--disable-windowed-traceback | 禁用异常提示(只能在Windows和macOS上使用) |
--uac-admin | 启动打包后的程序时申请以管理员模式运行(仅Windows) |
通常使用
像本次这种小脚本,不用考虑打包文件过大呀这些问题,故一般这种情况只考虑是否隐藏控制台,是否单文件打包,是否修改图标这些问题即可。
pyinstaller -w -F -i use.ico autoTask.py
上述语句就代表隐藏控制台窗口,单文件,更改图标为use.ico来打包autoTask.py为exe.
单文件打包模式下,启动动画的设立
使用-F打包后,会明显感觉到会有一段等待时间,故此时增加一个启动动画(闪屏来过渡一下较好)
这里主要是使用
--splash 参数
pyinstaller --splash LOGO.png AutoTask.py
大致过程是:给一张图片(PNG格式),然后可以修改splash的相关设置(在spec里),也可以设置一些文字显示,比如文件加载中...(在python添加),下面是具体过程。
- 在py文件开始部分添加:
try:
import pyi_splash
for i in range(100):
text = f"加载中……进度{i}%"
time.sleep(0.01)
pyi_splash.update_text(text) # 更新显示的文本
pyi_splash.close() # 关闭闪屏
except ImportError:
pass
- 重新打包(如果有缓存,加上--clean)
pyinstaller -F -w -i cow.ico --splash LOGO.png AutoTask.py
- 打包后会生成spec文件,进入修改splash部分(主要是text_pos,设置后可以显示加载依赖的文字和自己添加的文本):
splash = Splash(
'LOGO.png',
binaries=a.binaries,
datas=a.datas,
text_pos=(30,180),
text_size=10,
minify_script=True,
always_on_top=True,
)
- 使用spec更新打包文件
pyinstaller AutoTask.spec
...