1、是什么
PyInstaller 是一个用于将 Python 脚本打包成独立可执行文件的工具。它支持跨平台打包,可以在 Windows、macOS 和 Linux 系统上使用。PyInstaller 会自动处理脚本的依赖项,并将它们打包到一个可执行文件或一个包含所有文件的目录中。
功能特点
跨平台支持:可以在 Windows、macOS 和 Linux 系统上使用。
自动处理依赖项:自动分析脚本的依赖项,并将它们打包到可执行文件中。
生成单个可执行文件:可以将所有依赖项打包到一个单独的可执行文件中,方便分发。
支持多种打包选项:可以指定窗口化应用、隐藏控制台窗口等选项。
2.怎么用
2.1基本用法
1. 生成可执行文件:
在终端或命令提示符中导航到包含 Python 脚本的目录,然后运行以下命令:
pyinstaller script_name.py
这将生成一个 `dist` 目录,其中包含可执行文件。
2. 生成单个可执行文件:
如果想将所有依赖项打包到一个单独的可执行文件中,可以使用 `-F` 或 `--onefile` 选项:
pyinstaller -F script_name.py
3. 指定输出目录:
如果想指定输出目录,可以使用 `-o` 或 `--distpath` 选项:
pyinstaller -F -o output_directory script_name.py
4. 隐藏控制台窗口:
如果打包的是 GUI 应用程序,并且不想显示控制台窗口,可以使用 `-w` 或 `--windowed` 选项:
pyinstaller -F -w script_name.py
2.2高级选项
- 添加图标:可以使用 `--icon` 选项为可执行文件添加图标:
pyinstaller -F --icon=icon.ico script_name.py
- 指定临时文件目录:可以使用 `--workpath` 选项指定临时文件目录:
pyinstaller -F --workpath=build_directory script_name.py
- 排除不需要的模块:可以使用 `--exclude-module` 选项排除不需要的模块:
pyinstaller -F --exclude-module=module_name script_name.py
3、示例
3.1 单个文件打包
(1)打包命令:
在终端,main.py文件所在文件夹和环境
pyinstaller -F main.py
打包成功
(2)修改main.spec配置文件
中括号中是你的py文件,pathex中是你文件躲在的绝对路径
(3)执行main.spec配置文件
pyinstaller main.spec
3.2 多个文件的示例
(1)与单个文件相同
(2)修改spec配置文件
① 所有需要的py文件和绝对路径
② 所有资源存在data
data是一个列表,数据存放以二元组形式存放,前面的是数据名称,后面的是相对于predict_tinajin.py当前目录的路径。
③ 最好在exe文件所在目录打开终端运行exe文件,这样即使报错也不会一闪而过。一般是报错或者exe执行完终端界面就会消失,在所在路径的地方运行就不会
4、关于spec更详细的信息
当然,以下是对 .spec 文件中给出的 PyInstaller 配置的逐行解释:
a = Analysis(
['predict_tianjin.py'], # 1
pathex=[], # 2
binaries=[], # 3
datas=[], # 4
hiddenimports=[], # 5
hookspath=[], # 6
hooksconfig={}, # 7
runtime_hooks=[], # 8
excludes=[], # 9
noarchive=False, # 10
optimize=0, # 11
)
pyz = PYZ(a.pure) # 12
exe = EXE(
pyz, # 13
a.scripts, # 14
a.binaries, # 15
a.datas, # 16
[], # 17
name='predict_tianjin', # 18
debug=False, # 19
bootloader_ignore_signals=False, # 20
strip=False, # 21
upx=True, # 22
upx_exclude=[], # 23
runtime_tmpdir=None, # 24
console=True, # 25
disable_windowed_traceback=False, # 26
argv_emulation=False, # 27
target_arch=None, # 28
codesign_identity=None, # 29
entitlements_file=None, # 30
)
解释:
['predict_tianjin.py']: 这是主脚本文件的路径列表,PyInstaller 将从这个脚本开始分析依赖项。
pathex=[]: 这是额外的路径列表,PyInstaller 将在此列表中的路径中搜索模块。
binaries=[]: 这是包含非 Python 二进制文件的元组列表,格式为 (src, dest),其中 src 是打包文件的路径,dest 是打包文件在可执行文件中的路径。
datas=[]: 这是包含数据文件的元组列表,格式与 binaries 相同。
hiddenimports=[]: 这是需要隐式导入的模块列表,这些模块可能没有在脚本中直接导入,但需要包含在打包中。
hookspath=[]: 这是包含 PyInstaller 钩子文件的路径列表,这些钩子文件用于处理特定模块的打包需求。
hooksconfig={}: 这是钩子配置的字典,用于传递配置选项给钩子。
runtime_hooks=[]: 这是运行时钩子脚本的路径列表,这些脚本将在程序开始执行之前运行。
excludes=[]: 这是将被排除在打包之外的模块列表。
noarchive=False: 如果设置为 True,则不会创建 Python 库归档文件,而是将它们作为单独的文件包含。
optimize=0: 设置 Python 优化级别,0 表示不优化,1 表示去除断言,2 表示优化字节码。
pyz = PYZ(a.pure): 创建一个 PYZ 对象,这是一个包含所有纯 Python 代码(不包含二进制扩展)的压缩包。
13-30. exe = EXE(...): 创建一个可执行文件对象,包含以下参数:
- pyz: 上一步创建的 PYZ 对象。
- a.scripts: 由 Analysis 对象确定的脚本列表。
- a.binaries: 由 Analysis 对象确定的二进制文件列表。
- a.datas: 由 Analysis 对象确定的数据文件列表。
- []: 不明参数,通常为空列表。
- name='predict_tianjin': 生成的可执行文件的基本名称。
- 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: 控制是否启用 argv 模拟。
- target_arch=None: 指定目标架构,例如 'x86' 或 'x64'。
- codesign_identity=None: 用于代码签名的标识。