记录了当前PyInstaller 6.2.0版本的所有参数及说明
pyinstaller 可以用一行命令将Python脚本生成多平台的应用程序,它有丰富的参数可以使用,如-F生成一个exe文件、指定Icon、隐藏控制窗口、指定附加打包文件、排除不需要的引用模块等等
参数 |
描述 |
说明 |
-h |
显示帮助 |
无 |
-v |
显示版本号 |
无 |
-D |
生成one-folder的程序(默认) |
生成结果是一个目录,各种第三方依赖、资源和exe同时存储在该目录 |
-F |
生成one-file的程序 |
生成结果是一个exe文件,所有的第三方依赖、资源和代码均被打包进该exe内 |
–specpath |
指定.spec文件的存储路径 |
默认:当前目录 |
-n |
生成的.exe文件和.spec的文件名 |
默认:用户脚本的名称,即main.py和main.spec |
–add-data |
打包额外资源 |
用法:pyinstaller main.py --add-data=src;dest。windows以;分割,linux以:分割 |
–add-binary |
打包额外的代码 |
用法:同–add-data。与–add-data不同的是,用binary添加的文件,pyi会分析它引用的文件并把它们一同添加进来 |
-p |
指定额外的import路径,类似于使用PYTHONPATH |
参见PYTHONPATH |
–hidden-import |
打包额外py库 |
pyi在分析过程中,有些import没有正确分析出来,运行时会报import error,这时可以使用该参数 |
–additional-hooks-dir |
指定用户的hook目录 |
hook用法参见其他,系统hook在PyInstaller\hooks目录下 |
–runtime-hook |
指定用户runtime-hook |
如果设置了此参数,则runtime-hook会在运行main.py之前被运行 |
–exclude-module |
需要排除的module |
pyi会分析出很多相互关联的库,但是某些库对用户来说是没用的,可以用这个参数排除这些库,有助于减少生成文件的大小 |
--splash IMAGE_FILE |
指定启动画面图片。 |
|
-d |
执行生成的main.exe时,会输出pyi的一些log,有助于查错 |
默认:不输出pyi的log(用法:-d {all,imports,bootloader,noarchive}) |
-s |
优化符号表 |
原文明确表示不建议在windows上使用 |
–noupx |
强制不使用upx压缩 |
默认:尽可能使用。 |
-c |
显示命令行窗口 |
与-w相反,默认含有此参数 |
-w |
不显示命令行窗口 |
编写GUI程序时使用此参数有用。 |
-i |
为main.exe指定图标 |
pyinstaller -i beauty.ico main.py |
–version-file |
添加版本信息文件 |
pyinstaller --version-file ver.txt |
-m, --manifest |
添加manifest文件 |
pyinstaller -m main.manifest (-m |
-r RESOURCE |
向Windows可执行文件添加或更新资源 |
|
–uac-admin |
创建一个Manifest,该Manifest将在应用程序启动时请求提升。 |
|
–uac-uiaccess |
允许升级的应用程序使用远程桌面。 |
|
–runtime-tmpdir |
指定运行时的临时目录 |
默认:使用系统临时目录 |
–distpath |
生成文件放在哪里 |
默认:当前目录的dist文件夹内 |
–workpath |
生成过程中的中间文件放在哪里 |
默认:当前目录的build文件夹内 |
-y |
如果dist文件夹内已经存在生成文件,则不询问用户,直接覆盖 |
默认:询问是否覆盖 |
–upx-dir UPX_DIR |
指定upx工具的目录 |
默认:execution path |
–clean |
在本次编译开始时,清空上一次编译生成的各种文件 |
默认:不清除 |
–log-level LEVEL |
控制编译时pyi打印的信息 |
一共有6个等级,由低到高分别为TRACE DEBUG INFO(默认) WARN ERROR CRITICAL。也就是默认情况下,不打印TRACE和DEBUG信息 |
--contents-directory |
指定用于存储应用程序内容的目录。 |
--contents-directory CONTENTS_DIRECTORY |
--collect-submodules |
收集子模块。 |
将脚本中使用的 Python 模块的所有子模块一并打包。 |
--collect-data |
收集数据文件,以便在打包时使用。 |
--collect-data MODULENAME |
--collect-binaries |
收集二进制文件。 |
将脚本中使用的二进制文件一并打包。 |
--collect-all |
收集所有类型的文件。 |
将脚本中使用的所有文件(包括子模块、数据文件、二进制文件等)一并打包。 |
--copy-metadata |
复制元数据。 |
复制与 PyInstaller 相关的元数据文件。 |
--recursive-copy-metadata |
递归复制元数据。 |
递归复制与 PyInstaller 相关的元数据文件。 |
--python-option |
传递给 Python 解释器的选项。 |
允许将额外的选项传递给 Python 解释器。 |
--upx-exclude |
排除不需要压缩的文件类型。 |
[--upx-exclude FILE] |
--osx-bundle-identifier |
指定 macOS 捆绑标识符。 |
为生成的 macOS 应用程序指定唯一的捆绑标识符。 |
--argv-emulation |
模拟命令行参数。 |
模拟命令行参数以提高兼容性。 |
--disable-windowed-traceback |
禁用窗口化回溯。 |
在发生错误时禁用窗口化回溯。 |
--hide-console |
隐藏控制台窗口。 |
[--hide-console {minimize-late,hide-late,minimize-early,hide-early}] |
--target-architecture |
指定目标架构。 |
[--target-architecture ARCH] 指定生成的可执行文件的目标架构(例如,32位或64位)。 |
--codesign-identity |
指定代码签名的身份。 |
为生成的 macOS 应用程序指定代码签名的身份 |
--osx-entitlements-file |
指定 macOS 应用程序的授权文件。 |
[--osx-entitlements-file FILENAME] |
--bootloader-ignore-signals |
忽略引导加载程序的信号。 |
在某些情况下,忽略由引导加载程序(Bootloader)发送的信号。 |
scriptname |
你的 Python 脚本的名称。 |
scriptname [scriptname ...]指定要由 PyInstaller 打包的 Python 脚本。 |
PyInstaller可以使用一些参数来隐藏生成的窗口,并且你可以使用--hide-console{hide-early}选项来生成一个没有控制台窗口的可执行文件。
此外,你可以通过--log-level选项设置日志级别,以便将日志写入文件。最后,如果你想要在发生错误时提醒用户,你可以使用try-except块捕获异常,并选择性地显示对话框。
下面是一个基本的PyInstaller命令的例子:
pyinstaller --noconsole --log-level=DEBUG your_script.py
这个命令会生成一个没有控制台窗口的可执行文件,并将DEBUG级别的日志写入默认的日志文件。
如果你想要在程序中自定义日志文件的路径,可以在你的脚本中添加以下代码:
import logging
from pathlib import Path
# 设置日志文件路径
log_file_path = Path.home() / "Desktop" / "your_log_file.log"
logging.basicConfig(filename=log_file_path, level=logging.DEBUG)
# 你的其他代码...
# 捕获异常并在发生错误时显示对话框
try:
# 你的主程序逻辑...
except Exception as e:
logging.error(f"An error occurred: {str(e)}")
messagebox.showerror("错误", f"发生错误: {str(e)}")
在这个例子中,日志会写入指定的文件路径,而且在发生异常时,会弹出一个错误对话框来提醒用户。请确保在使用messagebox之前,你已经导入了相应的模块(例如,from tkinter import messagebox)。
请根据你的实际需求对这些代码进行适当的修改。