python打包工具pyinstaller,参数说明文档
root@ubuntu:/# pyinstaller --help 用法: pyinstaller [-h] [-v] [-D] [-F] [--specpath DIR] [-n NAME] [--add-data <SRC;DEST or SRC:DEST>] [--add-binary <SRC;DEST or SRC:DEST>] [-p DIR] [--hidden-import MODULENAME] [--collect-submodules MODULENAME] [--collect-data MODULENAME] [--collect-binaries MODULENAME] [--collect-all MODULENAME] [--copy-metadata PACKAGENAME] [--recursive-copy-metadata PACKAGENAME] [--additional-hooks-dir HOOKSPATH] [--runtime-hook RUNTIME_HOOKS] [--exclude-module EXCLUDES] [--splash IMAGE_FILE] [-d {all,imports,bootloader,noarchive}] [--python-option PYTHON_OPTION] [-s] [--noupx] [--upx-exclude FILE] [-c] [-w] [-i <FILE.ico or FILE.exe,ID or FILE.icns or Image or "NONE">] [--disable-windowed-traceback] [--version-file FILE] [-m <FILE or XML>] [--no-embed-manifest] [-r RESOURCE] [--uac-admin] [--uac-uiaccess] [--win-private-assemblies] [--win-no-prefer-redirects] [--argv-emulation] [--osx-bundle-identifier BUNDLE_IDENTIFIER] [--target-architecture ARCH] [--codesign-identity IDENTITY] [--osx-entitlements-file FILENAME] [--runtime-tmpdir PATH] [--bootloader-ignore-signals] [--distpath DIR] [--workpath WORKPATH] [-y] [--upx-dir UPX_DIR] [-a] [--clean] [--log-level LEVEL] scriptname [scriptname ...] 位置参数: scriptname 要处理的脚本文件的名称或者一个.spec文件。如果指定了.spec文件,则大多数选项都是不必要的,会被忽略。 可选参数: -h, --help 显示帮助信息并退出 -v, --version 显示程序版本信息并退出。 --distpath DIR 指定打包应用的目录(默认为./dist) --workpath WORKPATH 指定所有临时工作文件(.log, .pyz等)的目录(默认为./build) -y, --noconfirm 替换输出目录(默认为SPECPATH/dist/SPECNAME)而不需要确认 --upx-dir UPX_DIR UPX工具的路径(默认为搜索执行路径) -a, --ascii 不包含Unicode编码支持(默认情况下如果可用则包含) --clean 在构建之前清理PyInstaller缓存和临时文件。 --log-level LEVEL 构建时控制台消息的详细程度。LEVEL可以是TRACE、DEBUG、INFO、WARN、DEPRECATION、ERROR、FATAL之一(默认为INFO)。也可以通过PYI_LOG_LEVEL环境变量进行设置。 生成内容: -D, --onedir 创建一个包含可执行文件的单文件夹捆绑包(默认) -F, --onefile 创建一个单文件捆绑的可执行文件。 --specpath DIR 存储生成的.spec文件的文件夹(默认为当前目录) -n NAME, --name NAME 分配给捆绑应用和.spec文件的名称(默认为第一个脚本的基本名称) 捆绑什么,搜索什么: --add-data <SRC;DEST or SRC:DEST> 添加到可执行文件的附加非二进制文件或文件夹。路径分隔符是平台特定的,使用``os.pathsep``(在Windows上为``;``,在大多数Unix系统上为``:``)。此选项可以多次使用。 --add-binary <SRC;DEST or SRC:DEST> 添加到可执行文件的附加二进制文件。有关详细信息,请参见``--add-data``选项。此选项可以多次使用。 -p DIR, --paths DIR 搜索导入的路径(类似于使用PYTHONPATH)。可以使用多个路径,用``':'``分隔,或多次使用此选项。相当于在.spec文件中提供``pathex``参数。 --hidden-import MODULENAME, --hiddenimport MODULENAME 指定在脚本代码中不可见的导入模块。此选项可以多次使用。 --collect-submodules MODULENAME 收集指定包或模块的所有子模块。此选项可以多次使用。 --collect-data MODULENAME, --collect-datas MODULENAME 收集指定包或模块的所有数据文件。此选项可以多次使用。 --collect-binaries MODULENAME 收集指定包或模块的所有二进制文件。此选项可以多次使用。 --collect-all MODULENAME 收集指定包或模块的所有子模块、数据文件和二进制文件。此选项可以多次使用。 --copy-metadata PACKAGENAME 复制指定包的元数据。此选项可以多次使用。 --recursive-copy-metadata PACKAGENAME 复制指定包及其所有依赖项的元数据。此选项可以多次使用。 --additional-hooks-dir HOOKSPATH 指定额外的钩子路径。此选项可以多次使用。 --runtime-hook RUNTIME_HOOKS 指定自定义运行时钩子文件的路径。运行时钩子是与可执行文件捆绑在一起的代码,在任何其他代码或模块之前执行,用于设置运行时环境的特殊功能。此选项可以多次使用。 --exclude-module EXCLUDES 忽略的可选模块或包(Python名称,而不是路径名称)。此选项可以多次使用。 --splash IMAGE_FILE (实验性功能) 向应用程序添加一个带有图像IMAGE_FILE的启动画面。启动画面可以在解压过程中显示进度更新。 如何生成: -d {all,imports,bootloader,noarchive}, --debug {all,imports,bootloader,noarchive} 提供用于调试冻结应用程序的帮助。此参数可以多次提供以选择以下选项之一。 - all: 以下所有选项。 - imports: 指定-v选项给底层Python解释器,导致它在每次初始化模块时打印一条消息,显示加载模块的位置(文件名或内置模块)。参见 https://docs.python.org/3/using/cmdline.html#id4。 - bootloader: 告诉引导加载程序在初始化和启动捆绑应用程序时发出进度消息。用于诊断缺少导入的问题。 - noarchive: 将所有冻结的Python源文件存储为结果可执行文件内的存档,而不是文件存储在结果输出目录中。 --python-option PYTHON_OPTION 指定要在运行时传递给Python解释器的命令行选项。目前支持"v"(等效于"--debug imports")、"u"和"W<warning control>"。 -s, --strip 对可执行文件和共享库应用符号表剥离(不推荐在Windows上使用) --noupx 即使可用,也不使用UPX(在Windows和*nix之间的工作方式不同) --upx-exclude FILE 使用upx时防止对二进制文件进行压缩。如果upx在压缩过程中破坏某些二进制文件,通常会使用此选项。FILE是二进制文件的文件名,不包含路径。此选项可以多次使用。 仅适用于Windows和Mac OS X的选项: -c, --console, --nowindowed 为标准输入/输出打开控制台窗口(默认)。在Windows上,如果第一个脚本是'.pyw'文件,则此选项无效。 -w, --windowed, --noconsole Windows和Mac OS X:不为标准输入/输出提供控制台窗口。在Mac OS上,这还会触发构建Mac OS .app包。在Windows上,如果第一个脚本是'.pyw'文件,则此选项会自动设置。在*NIX系统上,此选项将被忽略。 -i <FILE.ico或FILE.exe,ID或FILE.icns或Image或"NONE">, --icon <FILE.ico或FILE.exe,ID或FILE.icns或Image或"NONE"> FILE.ico:将图标应用于Windows可执行文件。FILE.exe,ID:从exe中提取具有ID的图标。FILE.icns:将图标应用于Mac OS上的.app包。如果输入的图像文件不是平台格式(Windows上的ico,Mac上的icns),PyInstaller将尝试使用Pillow将图标转换为正确的格式(如果安装了Pillow)。使用"NONE"来不应用任何图标,从而使操作系统显示一些默认图标(默认:应用PyInstaller的图标)。此选项可以多次使用。 --disable-windowed-traceback 禁用窗口模式(noconsole)下未处理异常的回溯转储(仅适用于Windows和macOS),并显示一个消息,说明此功能已禁用。 Windows特定选项: --version-file FILE 从FILE中添加版本资源到exe。 -m <FILE或XML>, --manifest <FILE或XML> 将manifest FILE或XML添加到exe。 --no-embed-manifest 生成外部的.exe.manifest文件,而不是将manifest嵌入到exe中。仅适用于onedir模式;在onefile模式下,无论此选项如何,manifest始终被嵌入。 -r RESOURCE, --resource RESOURCE 向Windows可执行文件添加或更新资源。RESOURCE是一个到四个项目,FILE[,TYPE[,NAME[,LANGUAGE]]]。FILE可以是数据文件或exe/dll。对于数据文件,至少必须指定TYPE和NAME。LANGUAGE默认为0,或可以指定为通配符*以更新给定TYPE和NAME的所有资源。对于exe/dll文件,如果省略了或指定为通配符*,则将添加/更新来自FILE的所有资源到最终的可执行文件中。此选项可以多次使用。 --uac-admin 使用此选项创建一个Manifest,将在应用程序启动时请求提升。 --uac-uiaccess 使用此选项允许提升的应用程序与远程桌面一起工作。 Windows并行程序集搜索选项(高级): --win-private-assemblies 将任何捆绑到应用程序中的共享程序集更改为私有程序集。这意味着始终使用这些程序集的确切版本,并忽略用户机器上系统级安装的任何更新版本。 --win-no-prefer-redirects 在搜索要捆绑到应用程序中的共享或私有程序集时,PyInstaller将不倾向于遵循重定向到更新版本的策略,并尝试捆绑程序集的确切版本。 Mac OS特定选项: --argv-emulation 启用macOS应用程序包的argv模拟。如果启用,启动时的初始打开文档/URL事件将由引导加载程序处理,并将传递的文件路径或URL附加到sys.argv。 --osx-bundle-identifier BUNDLE_IDENTIFIER Mac OS .app包标识符用作默认的唯一程序名称,用于代码签名目的。通常的形式是反向DNS表示法中的分层名称。例如:com.mycompany.department.appname(默认值:第一个脚本的基本名称) --target-architecture ARCH, --target-arch ARCH 目标架构(仅适用于macOS;有效值:x86_64,arm64,universal2)。启用在冻结应用程序的universal2和单架构版本之间切换(前提是Python安装支持目标架构)。如果未指定目标架构,则针对当前运行的架构。 --codesign-identity IDENTITY 代码签名身份(仅适用于macOS)。使用提供的身份对收集的二进制文件和生成的可执行文件进行签名。如果未提供签名身份,则执行自动签名。 --osx-entitlements-file FILENAME 用于在签署收集的二进制文件时使用的权限文件(仅适用于macOS)。 很少使用的特殊选项: --runtime-tmpdir PATH 在`onefile`模式下提取库和支持文件的位置。如果给出此选项,引导加载程序将忽略运行时操作系统定义的任何临时文件夹位置。在此处将创建``_MEIxxxxxx``文件夹。请仅在您知道自己在做什么的情况下使用此选项。 --bootloader-ignore-signals 告诉引导加载程序忽略信号而不是将其转发给子进程。在某些情况下很有用,例如监督进程通过进程组向引导加载程序和子进程发送信号,以避免向子进程发送两次信号。 root@ubuntu:/#
程序有使用到sklearn库时,打包运行时提示缺少一些模块,如sklearn.utils._cython_blas
修改spec文件中的hiddenimports
参数后,重新打包,修改如下
a = Analysis(['mainarea_buffer.py','E:\\GitHub\\Zone\\Zone\\zone_func\\func.py'], pathex=['E:\\GitHub\\Zone\\Zone'], binaries=[], datas=[('global_popu.tif', '.')], hiddenimports=['sklearn.utils._cython_blas','cython', 'sklearn', 'sklearn.ensemble','sklearn.neighbors.typedefs','sklearn.neighbors.quad_tree','sklearn.tree._utils','scipy._lib.messagestream'], hookspath=[], runtime_hooks=[], excludes=[], win_no_prefer_redirects=False, win_private_assemblies=False, cipher=block_cipher, noarchive=False)
运行命令,生成app.spec
pyi-makespec app.py