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