文章目录
- 前言
- 如何将Python 脚本打包成可执行文件(exe)
- 1. 测试python脚本
- 2. 安装 PyInstaller
- 3. 创建 PyInstaller spec 文件
- 4. 生成可执行文件
- 4.1 去掉黑框
前言
如果您觉得有用的话,记得给博主点个赞,评论,收藏一键三连啊,写作不易啊^ _ ^。
而且听说点赞的人每天的运气都不会太差,实在白嫖的话,那欢迎常来啊!!!
如何将Python 脚本打包成可执行文件(exe)
1. 测试python脚本
python-登录界面-demo
2. 安装 PyInstaller
pip install pyinstaller
3. 创建 PyInstaller spec 文件
pyi-makespec --onefile your_script.py
生成15-GUI-登录界面.spec文件
# -*- mode: python ; coding: utf-8 -*-
a = Analysis(
['15-GUI-登录界面.py'],
pathex=[],
binaries=[],
datas=[],
hiddenimports=[],
hookspath=[],
hooksconfig={},
runtime_hooks=[],
excludes=[],
noarchive=False,
optimize=0,
)
pyz = PYZ(a.pure)
exe = EXE(
pyz,
a.scripts,
a.binaries,
a.datas,
[],
name='15-GUI-登录界面',
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
upx_exclude=[],
runtime_tmpdir=None,
console=True,
disable_windowed_traceback=False,
argv_emulation=False,
target_arch=None,
codesign_identity=None,
entitlements_file=None,
)
解析:
Analysis 部分:
a = Analysis(
['15-GUI-登录界面.py'], # 需要打包的主脚本
pathex=[], # 包含脚本的搜索路径,通常是当前目录
binaries=[], # 需要打包的二进制文件列表
datas=[], # 需要打包的数据文件列表
hiddenimports=[], # 需要隐藏导入的模块列表
hookspath=[], # Hook 文件的搜索路径
hooksconfig={}, # Hook 文件的配置
runtime_hooks=[], # 运行时钩子
excludes=[], # 需要排除的模块列表
noarchive=False, # 如果为 True,不打包成一个单独的文件
optimize=0, # 优化级别(0, 1, 2)
)
参数解释:
[‘15-GUI-登录界面.py’]:主脚本文件。
pathex:搜索路径,PyInstaller 在这些路径中查找导入的模块。可以指定多个路径。
binaries:额外的二进制文件,通常是 DLL 或 SO 文件,需要包含在打包中。
datas:数据文件列表,如图像、配置文件等,需要包含在打包中。
hiddenimports:PyInstaller 未能自动检测到的模块列表。
hookspath:指定钩子文件的路径,钩子文件是用来处理模块的特殊导入情况的。
hooksconfig:钩子配置文件。
runtime_hooks:运行时钩子,程序启动时执行的钩子。
excludes:需要排除在打包之外的模块列表。
noarchive:如果为 True,则不将所有内容打包到一个单独的 .pyz 文件中。
optimize:优化级别,0(无优化)、1(基本优化)、2(更高优化)。
PYZ 部分:
pyz = PYZ(a.pure)
这部分创建一个 .pyz 文件(包含所有纯 Python 模块)。
EXE 部分:
exe = EXE(
pyz, # PYZ 对象
a.scripts, # 分析得到的脚本文件
a.binaries, # 分析得到的二进制文件
a.datas, # 分析得到的数据文件
[], # 其他需要包含的文件列表
name='15-GUI-登录界面', # 生成的可执行文件名称
debug=False, # 如果为 True,生成的可执行文件将在调试模式下运行
bootloader_ignore_signals=False, # 启动程序忽略信号
strip=False, # 如果为 True,从生成的文件中去掉符号表和调试信息
upx=True, # 如果为 True,使用 UPX 压缩可执行文件
upx_exclude=[], # 不使用 UPX 压缩的文件列表
runtime_tmpdir=None, # 在运行时解压临时文件的目录
console=True, # 如果为 True,生成的可执行文件将在控制台模式下运行
disable_windowed_traceback=False, # 禁用窗口化的回溯
argv_emulation=False, # 模拟命令行参数传递(仅 MacOS 有效)
target_arch=None, # 目标架构
codesign_identity=None, # 代码签名身份(仅 MacOS 有效)
entitlements_file=None, # 权限文件(仅 MacOS 有效)
)
参数解释:
pyz:前面创建的 PYZ 对象。
a.scripts:分析对象中的脚本文件。
a.binaries:分析对象中的二进制文件。
a.datas:分析对象中的数据文件。
name:生成的可执行文件名称。
debug:如果为 True,生成的可执行文件将在调试模式下运行。
bootloader_ignore_signals:如果为 True,启动程序将忽略信号。
strip:如果为 True,从生成的文件中去掉符号表和调试信息。
upx:如果为 True,使用 UPX 压缩可执行文件。
upx_exclude:不使用 UPX 压缩的文件列表。
runtime_tmpdir:在运行时解压临时文件的目录。
console:如果为 True,生成的可执行文件将在控制台模式下运行。
disable_windowed_traceback:禁用窗口化的回溯。
argv_emulation:模拟命令行参数传递(仅 MacOS 有效)。
target_arch:目标架构。
codesign_identity:代码签名身份(仅 MacOS 有效)。
entitlements_file:权限文件(仅 MacOS 有效)。
进一步定义:
你可以根据需要进一步自定义 spec 文件。例如,如果你想添加数据文件,可以这样修改:
a = Analysis(
['15-GUI-登录界面.py'],
pathex=[],
binaries=[],
datas=[
('data/logConfig.ini', 'data'), # 添加数据文件
],
hiddenimports=[],
hookspath=[],
hooksconfig={},
runtime_hooks=[],
excludes=[],
noarchive=False,
optimize=0,
)
4. 生成可执行文件
pyinstaller your_script.spec
测试:
双击:
测试成功。
4.1 去掉黑框
需要将console参数设置为False
# -*- mode: python ; coding: utf-8 -*-
a = Analysis(
['15-GUI-登录界面.py'],
pathex=[],
binaries=[],
datas=[],
hiddenimports=[],
hookspath=[],
hooksconfig={},
runtime_hooks=[],
excludes=[],
noarchive=False,
optimize=0,
)
pyz = PYZ(a.pure)
exe = EXE(
pyz,
a.scripts,
a.binaries,
a.datas,
[],
name='15-GUI-登录界面',
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,
)
重新生成可执行文件