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添加),下面是具体过程。

  1. 在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
  1. 重新打包(如果有缓存,加上--clean)
    pyinstaller -F -w -i cow.ico --splash LOGO.png AutoTask.py
  2. 打包后会生成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,
)
  1. 使用spec更新打包文件
    pyinstaller AutoTask.spec
    ...
Python
$ cd ..