【Python 实战】---- 实现一个可选择、配置操作的批量文件上传工具(五)打包成 exe 应用

【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_cipherNone,则不进行加密。

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 文件,那么上传应用生成成功,后期就可以直接使用,有了配置文件,我们需要修改什么的时候,直接执行配置文件进行打包,就方便了很多,不用怕配置出错。

相关推荐
杜子不疼.6 分钟前
《Python学习之第三方库:开启无限可能》
开发语言·python·学习
青衫客361 小时前
用 Python 实现一个“小型 ReAct 智能体”:思维链 + 工具调用 + 环境交互
python·大模型·llm·react
AI视觉网奇1 小时前
音频分类模型笔记
人工智能·python·深度学习
Ratten2 小时前
【Python 实战】---- 实现一个可选择、配置操作的批量文件上传工具(四)配置管理界面和逻辑实现
python
跟橙姐学代码3 小时前
写 Python 函数别再死抠参数了,这招让代码瞬间灵活
前端·python
nightunderblackcat3 小时前
进阶向:人物关系三元组,解锁人物关系网络的钥匙
开发语言·python·开源·php
站大爷IP3 小时前
Pandas与NumPy:Python数据处理的双剑合璧
python
站大爷IP4 小时前
Python枚举进化论:IntEnum与StrEnum的实战指南
python
甄超锋4 小时前
python sqlite3模块
jvm·数据库·python·测试工具·django·sqlite·flask