pyinstaller打包参数说明
这个文章写于2024年11月3日。用的pyinstaller是6.3.0。这个版本会默认使用仅需要的包,而不会把整个环境的Python包都给打包了。
1. 基本参数
-h, --help:显示帮助信息。-v, --version:显示pyinstaller版本信息。
2. 打包模式
-D, --onedir:默认选项,将所有文件打包成一个文件夹,包括.exe文件和依赖的 DLL 等文件(多文件模式)。-F, --onefile:将所有文件打包成一个独立的.exe文件(单文件模式),运行时会解压到临时目录,因此启动速度可能较慢。而且由于杀毒软件的影响,可能会更慢,以至于你会非常痛苦。
3. 路径和文件名
--specpath DIR:指定生成的.spec文件的保存路径。默认保存在当前目录。-n NAME, --name NAME:指定生成的.exe文件的名称。--distpath DIR:设置打包生成的输出文件夹,默认为dist。--workpath WORKPATH:指定临时工作文件的保存路径,默认是build文件夹。--upx-dir UPX_DIR:指定 UPX 的安装目录,以压缩可执行文件中的二进制文件。
4. 添加资源
--add-data SOURCE:DEST:指定要包含在包中的数据文件,格式为SOURCE:DEST,SOURCE是文件路径,DEST是在程序运行时的目标路径。--add-binary SOURCE:DEST:包含外部二进制文件,格式与--add-data相同。--contents-directory CONTENTS_DIRECTORY:指定包含应用程序内容的目录(链接的dll等资源)。这里默认是_internal,什么意思呢?就是如果你使用-D将程序打包为分散的dll和exe,那么在默认的dist文件夹下,会生成一个叫你文件名的文件夹,比如./dist/yourapp/,这个里面会有一个yourapp.exe以及一个叫_internal的文件夹,里面是所有的dll和其他需要的资源。如果你的程序想作为环境变量内可使用的程序,这种默认名称可能会带来问题,因为所有的程序都叫这个名字。而这个参数,就是改变该文件夹的默认名称的。
5. 导入与依赖
-p DIR, --paths DIR:指定 Python 导入路径,打包时会从这些路径查找模块。--hidden-import MODULENAME:指定“隐藏”模块,用于导入检测不到的依赖模块。--collect-submodules MODULENAME:自动收集指定模块的所有子模块。--collect-data MODULENAME:包含指定模块的数据文件。--collect-binaries MODULENAME:包含指定模块的二进制文件。--collect-all MODULENAME:包含指定模块的所有子模块、数据文件和二进制文件。--copy-metadata PACKAGENAME:包含指定包的元数据(如版本号)。--recursive-copy-metadata PACKAGENAME:递归包含指定包的元数据。
6. 运行时配置
--runtime-tmpdir PATH:指定.exe在运行时解压依赖文件的路径。--runtime-hook RUNTIME_HOOKS:在程序启动时运行的自定义脚本(例如初始化设置等)。
7. 排除选项
--exclude-module EXCLUDES:排除指定模块,不包含在打包结果中。
8. 控制台和窗口配置
-c, --console:显示控制台窗口,适用于控制台应用程序(默认)。-w, --windowed:隐藏控制台窗口,适用于 GUI 应用程序。--hide-console {hide-early,minimize-early,hide-late,minimize-late}:指定隐藏控制台的时机(早期或后期隐藏)。-i FILE, --icon FILE:指定.exe文件的图标(必须是.ico文件)。如果你事先打包过,然后使用这个,不一定是看起来立刻生效的,这是因为Windows的explorer有缓存机制,刷新下缓存(不是靠右键菜单)或者把exe挪一下就好了。
9. 调试
-d {all,imports,bootloader,noarchive}:指定调试模式,例如all(启用所有调试)或imports(调试模块导入)。--log-level LEVEL:设置日志等级,常用值包括INFO、WARN、DEBUG等。
10. 签名和权限
--codesign-identity IDENTITY:对 macOS 程序进行代码签名。--uac-admin:生成需要管理员权限的.exe文件。--uac-uiaccess:生成需要用户界面访问权限的.exe文件。
11. UPX 压缩
--noupx:不使用 UPX 压缩(默认是自动检测 UPX)。--upx-exclude FILE:排除指定文件,不进行 UPX 压缩。
12. OSX 和其他平台
--osx-bundle-identifier BUNDLE_IDENTIFIER:设置 macOS 应用程序的 Bundle 标识符。--osx-entitlements-file FILENAME:macOS 用于设置安全权限的文件。
13. 其他选项
-y, --noconfirm:覆盖现有文件,忽略确认提示。--clean:清理缓存的临时文件和先前的构建。--splash IMAGE_FILE:为应用启动设置一个闪屏(仅在某些平台支持)。
例子:
需要将主程序叫chen.py的Python程序打包为分散的模式(因为运行起来启动很快),并且指定依赖文件夹叫_chen 。指定图标。
pyinstaller .\chen.py -i .\favicon.ico --contents-directory _chen
qt写的界面,启动后不希望有命令行界面(黑框框),打包为一个整体(方便分发)
pyinstaller .\chen.py -w -F -i .\favicon.ico
