将书写好的python程序封装成exe可执行文件需要使用pyinstaller插件。
1、安装pyinstaller安装包:
pip install pyinstaller
注:如遇到错误,可将pip指令换为pip3
2、打包python程序
打包python脚本程序共有两种方式,当需要的打包的脚本没有其他关联文件时,使用下面建议打包指令可以完成打包:
pyinstaller exe_main.py #exe_main.py为python脚本文件
这将会在当前目录下生成一个dist
文件夹,其中包含了打包后的可执行文件。
当打包的文件中存在其他关联文件(例如:UI界面)时可以使用 --help文档中的参数进行添加(指令详见附),但建议使用.spec文件完成打包:
输入
pyinstaller exe_main.py #exe_main.py为python脚本文件
之后会出现一个exe_main.spec文件,内容如下:
# -*- mode: python ; coding: utf-8 -*-
block_cipher = None
a = Analysis(
[#所有需要打包的python文件],
pathex=[#系统文件路径],
binaries=[],
datas=[("torch_cpu.dll","./"),
("torch_cuda_cpp.dll","./"),
("torch_cuda_cu.dll","./"),
("c10.dll","./"),
("api-ms-win-crt-heap-l1-1-0.dll","./"),
("api-ms-win-crt-runtime-l1-1-0.dll","./"),
("vcruntime140.dll","./"),
("vcruntime140_1.dll","./"),
("kernel32.dll","./"),
("ui_logo.png","img")#系统文件
],
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,
[],
exclude_binaries=True,
name='exe_main',
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
console=False,
icon='ui_logo.png',
disable_windowed_traceback=False,
argv_emulation=False,
target_arch=None,
codesign_identity=None,
entitlements_file=None,
)
coll = COLLECT(
exe,
a.binaries,
a.zipfiles,
a.datas,
strip=False,
upx=True,
upx_exclude=[],
name='exe_main',
)
配置项解释
该.spec配置文件用于指定pyinstaller的编译参数和选项。下面是各个配置项的作用解释:
block_cipher:用于指定加密算法,如果不需要加密可以设置为None。
Analysis:分析器,用于指定需要编译的Python脚本文件、路径、二进制文件、数据文件等。
['get_jtop_info.py']:需要编译的Python脚本文件列表。
pathex=[]:额外的模块搜索路径。
binaries=[]:需要包含的二进制文件。
datas=[]:需要包含的数据文件。
hiddenimports=[]:需要导入的隐藏模块。
hookspath=[]:自定义的钩子文件路径。
hooksconfig={}:自定义的钩子配置。
runtime_hooks=[]:运行时钩子。
excludes=[]:需要排除的模块。
win_no_prefer_redirects=False:在Windows上禁用优先重定向。
win_private_assemblies=False:在Windows上使用私有程序集。
cipher=block_cipher:加密算法。
noarchive=False:是否生成归档文件。
PYZ:生成的Python字节码文件。
pyz:纯净的Python字节码文件。
a.zipped_data:压缩的数据。
cipher=block_cipher:加密算法。
EXE:生成的可执行文件。
pyz:Python字节码文件。
a.scripts:附加的脚本文件。
exclude_binaries=True:是否排除二进制文件。
name='get_jtop_info':生成的可执行文件的名称。
debug=False:是否启用调试模式。
bootloader_ignore_signals=False:是否忽略引导程序的信号。
strip=False:是否剥离调试符号。
upx=True:是否使用UPX压缩。
console=True:是否为控制台应用程序。
disable_windowed_traceback=False:是否禁用窗口化的回溯。
argv_emulation=False:是否启用命令行参数模拟。
target_arch=None:目标架构。
codesign_identity=None:代码签名标识。
entitlements_file=None:授权文件。
COLLECT:收集生成的文件。
exe:可执行文件。
a.binaries:附加的二进制文件。
a.zipfiles:附加的压缩文件。
a.datas:附加的数据文件。
strip=False:是否剥离调试符号。
upx=True:是否使用UPX压缩。
upx_exclude=[]:需要排除的UPX压缩文件。
name='get_jtop_info':生成的应用程序的名称。
这些配置项可以根据需要进行修改,以满足特定的编译需求。
注:初次封装时,建议将console设置为True即设置为控制台程序,运行程序时可实时看到控制台信息,便于发现一些导致程序卡住或闪退的bug。
出现下面的界面表示封装完成
3481 INFO: Copying icon to EXE
3628 INFO: Copying icons from
3637 INFO: Writing RT_GROUP_ICON 0 resource with 104 bytes
3637 INFO: Writing RT_ICON 1 resource with 995 bytes
3637 INFO: Writing RT_ICON 2 resource with 1872 bytes
3637 INFO: Writing RT_ICON 3 resource with 3135 bytes
3637 INFO: Writing RT_ICON 4 resource with 5771 bytes
3646 INFO: Embedding manifest in EXE
3646 INFO: Updating manifest in
3646 INFO: Updating resource type 24 name 1 language 0
3653 INFO: Appending PKG archive to EXE
3782 INFO: Fixing EXE headers
3953 INFO: Building EXE from EXE-00.toc completed successfully.
3969 INFO: checking COLLECT
WARNING: The output directory "" and ALL ITS CONTENTS will be REMOVED! Continue? (y/N)y
On your own risk, you can use the option `--noconfirm` to get rid of this question.
34369 INFO: Removing dir
43980 INFO: Building COLLECT COLLECT-00.toc
85504 INFO: Building COLLECT COLLECT-00.toc completed successfully.
封装完成后,在dist文件夹中会生成一个与--name参数设定相同的文件夹,里面包含所有的依赖文件与封装好的可执行文件。
双击后缀为.exe的可执行文件即可运行封装好的程序。
附:pyinstaller帮助文档
帮助文档参考如下链接:
Python打包工具 Pyinstaller使用教程(将.py以及Python解释器和相关库打包可执行文件)-CSDN博客
参考文章
Python打包工具 Pyinstaller使用教程(将.py以及Python解释器和相关库打包可执行文件)-CSDN博客