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

相关推荐
IVEN_8 小时前
只会Python皮毛?深入理解这几点,轻松进阶全栈开发
python·全栈
Ray Liang9 小时前
用六边形架构与整洁架构对比是伪命题?
java·python·c#·架构设计
AI攻城狮10 小时前
如何给 AI Agent 做"断舍离":OpenClaw Session 自动清理实践
python
千寻girling10 小时前
一份不可多得的 《 Python 》语言教程
人工智能·后端·python
AI攻城狮13 小时前
用 Playwright 实现博客一键发布到稀土掘金
python·自动化运维
曲幽13 小时前
FastAPI分布式系统实战:拆解分布式系统中常见问题及解决方案
redis·python·fastapi·web·httpx·lock·asyncio
孟健1 天前
Karpathy 用 200 行纯 Python 从零实现 GPT:代码逐行解析
python
码路飞1 天前
写了个 AI 聊天页面,被 5 种流式格式折腾了一整天 😭
javascript·python
曲幽1 天前
FastAPI压力测试实战:Locust模拟真实用户并发及优化建议
python·fastapi·web·locust·asyncio·test·uvicorn·workers