【Python 实战】---- 实现一个可选择、配置操作的批量文件上传工具(五)打包成 exe 应用
1. 前言
很早之前,我实现过一个【Python 实战】---- 接口自动化:60行代码,如何通过Python requests实现图片上传,这个的确简化了前端开发对图片操作的时间,但是随着项目开发的越多,遇到一个新的问题,就是图片需要上传到每个项目的自己服务器中,而且每个项目的参数也不一样,有的需要加密,有的不需要,这就会出现我们需要根据不同的项目,对代码进行上传的微调,然后再打包成工具使用,最后就会发现有很多工具,完全达不到一个程序员的优雅,因此就想到使用 GUI 配置管理,将所有的工具进行配置管理。前边四篇文章已经将工具的实现讲完,剩下就是打包成 exe,就能直接成为工具使用了!
2. 安装 pyinstaller
pip install pyinstaller
        Python ---- pyInstaller 的常用打包命令
3. 使用 spec 配置文件进行打包
            
            
              ini
              
              
            
          
          # -*- mode: python ; coding: utf-8 -*-
block_cipher = None
        4. Analysis 配置
4.1 Analysis 配置解释
['hl_upload_gui.py']: 指定要打包的主 Python 脚本。pathex=[]: 额外的 Python 路径列表,用于查找模块。binaries=[]: 需要包含的二进制文件列表。datas=[('upload.png', '.'), ('upload_configs.json', '.')]: 需要包含的数据文件列表,格式为 (源文件, 目标目录)。hiddenimports=[]: 需要显式包含的模块列表,这些模块可能无法被 PyInstaller 自动检测到。hookspath=[]: 钩子文件的路径列表。hooksconfig={}: 钩子配置。runtime_hooks=[]: 运行时钩子脚本列表。excludes=[]: 需要排除的模块列表。win_no_prefer_redirects=False: Windows 特定选项,控制是否不优先使用重定向。win_private_assemblies=False: Windows 特定选项,控制是否使用私有程序集。cipher=block_cipher: 加密选项,用于加密 Python 字节码。noarchive=False: 控制是否将所有内容打包到一个可执行文件中。
4.2 Analysis 配置代码
            
            
              ini
              
              
            
          
          a = Analysis(
    ['hl_upload_gui.py'],
    pathex=[],
    binaries=[],
    datas=[('upload.png', '.'), ('upload_configs.json', '.')],
    hiddenimports=[],
    hookspath=[],
    hooksconfig={},
    runtime_hooks=[],
    excludes=[],
    win_no_prefer_redirects=False,
    win_private_assemblies=False,
    cipher=block_cipher,
    noarchive=False,
)
        5. PYZ 配置
5.1 PYZ 配置解释
a.pure: 纯 Python 模块,这些是不依赖于任何 C 扩展的模块。a.zipped_data: 压缩的数据,包含应用程序所需的资源文件。cipher=block_cipher: 加密选项,用于加密 Python 字节码,增加安全性。如果block_cipher为None,则不进行加密。
5.2 配置代码
            
            
              css
              
              
            
          
          pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher)
        6. EXE 配置
6.1 EXE 配置解释
pyz: PYZ 对象,包含纯 Python 模块和压缩数据。a.scripts: 脚本文件列表,通常是主脚本。a.binaries: 二进制文件列表,包括依赖的 DLL 和其他二进制文件。a.zipfiles: 压缩文件列表。a.datas: 数据文件列表,如配置文件、图片等。[]: 其他文件列表,可以包含额外的文件。name='hl_upload': 生成的可执行文件的名称。debug=False: 是否包含调试信息。bootloader_ignore_signals=False: 控制引导加载程序是否忽略信号。strip=False: 是否从可执行文件中剥离符号表。upx=True: 是否使用 UPX 压缩可执行文件。upx_exclude=[]: 不使用 UPX 压缩的文件列表。runtime_tmpdir=None: 运行时临时目录。console=False: 是否显示控制台窗口。disable_windowed_traceback=False: 是否禁用窗口模式下的回溯。argv_emulation=False: 是否启用参数模拟。target_arch=None: 目标架构。codesign_identity=None: 代码签名身份。entitlements_file=None: 权限文件。icon='upload.png': 可执行文件的图标。
6.2 配置代码
            
            
              ini
              
              
            
          
          exe = EXE(
    pyz,
    a.scripts,
    a.binaries,
    a.zipfiles,
    a.datas,
    [],
    name='hl_upload',
    debug=False,
    bootloader_ignore_signals=False,
    strip=False,
    upx=True,
    upx_exclude=[],
    runtime_tmpdir=None,
    console=False,
    disable_windowed_traceback=False,
    argv_emulation=False,
    target_arch=None,
    codesign_identity=None,
    entitlements_file=None,
    icon='upload.png'
)
        7. 完整的打包配置文件
            
            
              ini
              
              
            
          
          # -*- mode: python ; coding: utf-8 -*-
block_cipher = None
a = Analysis(
    ['hl_upload_gui.py'],
    pathex=[],
    binaries=[],
    datas=[('upload.png', '.'), ('upload_configs.json', '.')],
    hiddenimports=[],
    hookspath=[],
    hooksconfig={},
    runtime_hooks=[],
    excludes=[],
    win_no_prefer_redirects=False,
    win_private_assemblies=False,
    cipher=block_cipher,
    noarchive=False,
)
pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher)
exe = EXE(
    pyz,
    a.scripts,
    a.binaries,
    a.zipfiles,
    a.datas,
    [],
    name='hl_upload',
    debug=False,
    bootloader_ignore_signals=False,
    strip=False,
    upx=True,
    upx_exclude=[],
    runtime_tmpdir=None,
    console=False,
    disable_windowed_traceback=False,
    argv_emulation=False,
    target_arch=None,
    codesign_identity=None,
    entitlements_file=None,
    icon='upload.png'
)
        8. 执行配置文件
pyinstaller hl_upload_tool.spec
        9. 执行结果
 
 
10. 总结
可以看到最终成功在 dist 文件夹中生成了 hl_upload.exe 文件,那么上传应用生成成功,后期就可以直接使用,有了配置文件,我们需要修改什么的时候,直接执行配置文件进行打包,就方便了很多,不用怕配置出错。