pyinstaller:Python 打包可执行文件

最近更新于 2025-01-10 13:51

版本

pyinstaller 6.11.1

安装

pip installer pyinstaller

命令用法

pyinstaller [-h] [-v] [-D] [-F] [--specpath DIR] [-n NAME] [--contents-directory CONTENTS_DIRECTORY] [--add-data SOURCE:DEST] [--add-binary SOURCE: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}] [--optimize LEVEL] [--python-option PYTHON_OPTION] [-s] [--noupx] [--upx-exclude FILE] [-c] [-w] [--hide-console {hide-early,minimize-early,minimize-late,hide-late}] [-i <FILE.ico or FILE.exe,ID or FILE.icns or Image or "NONE">] [--disable-windowed-traceback] [--version-file FILE] [--manifest <FILE or XML>] [-m <FILE or XML>] [-r RESOURCE] [--uac-admin] [--uac-uiaccess] [--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] [--clean] [--log-level LEVEL] scriptname [scriptname ...]

参数含义(使用 AI 翻译)

**位置参数:**
  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实用工具的路径(默认:搜索执行路径)
  --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       为捆绑应用和spec文件指定名称(默认:第一个脚本的基名称)
  --contents-directory CONTENTS_DIRECTORY
                        对于onedir构建,指定所有支持文件(即除了可执行文件本身之外的所有文件)将被放置的目录的名称。使用"."可以重新启用旧的onedir布局,而没有内容目录。

**要捆绑什么,在哪里搜索:**
  --add-data SOURCE:DEST
                        要添加到应用的额外数据文件或包含数据文件的目录。参数值应该是"source:dest_dir"的形式,其中source是被收集的文件(或目录)的路径,dest_dir是相对于顶级应用目录的目标目录,两个路径用冒号(:)分隔。要将文件放在顶级应用目录中,使用.作为dest_dir。这个选项可以多次使用。
  --add-binary SOURCE:DEST
                        要添加到可执行文件的额外二进制文件。查看``--add-data``选项的格式。这个选项可以多次使用。
  -p, --paths DIR       用于搜索导入的路径(类似于使用PYTHONPATH)。允许多个路径,用``';'``分隔,或者多次使用此选项。等同于在spec文件中提供``pathex``参数。
  --hidden-import, --hiddenimport MODULENAME
                        代码中不可见的导入名称。这个选项可以多次使用。
  --collect-submodules MODULENAME
                        从指定的包或模块中收集所有子模块。这个选项可以多次使用。
  --collect-data, --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, --debug {all,imports,bootloader,noarchive}
                        为调试冻结应用提供帮助。这个参数可以多次提供以选择以下选项中的几个。

                        all: 下面三个选项的全部。

                        imports: 指定 -v 选项给底层Python解释器,导致它每次初始化模块时打印消息,显示它被加载的位置(文件名或内置模块)。详见
                          https://docs.python.org/3/using/cmdline.html#id4. 

                        bootloader: 告诉引导程序在初始化和启动捆绑应用时发出进度消息。用于诊断缺少导入的问题。

                        noarchive: 与将所有冻结的Python源文件存储在结果可执行文件内的归档不同,将它们作为文件存储在结果输出目录中。

  --optimize LEVEL      用于收集的Python模块和脚本的字节码优化级别。详情请参阅PyInstaller手册中的“字节码优化级别”部分。
  --python-option PYTHON_OPTION
                        指定在运行时传递给Python解释器的命令行选项。当前支持 "v"(等同于--debug imports),"u","W <警告控制>","X <xoption>" 和 "hash_seed=<值>"。详情请参阅PyInstaller手册中的“指定Python解释器选项”部分。
  -s, --strip           对可执行文件和共享库应用符号表剥离(Windows上不推荐)
  --noupx              即使可用也不使用UPX(在Windows和*nix之间工作方式不同)
  --upx-exclude FILE    在使用upx时防止二进制文件被压缩。这通常用于如果upx在压缩期间损坏了某些二进制文件。FILE是没有路径的二进制文件名。这个选项可以多次使用。

**Windows和Mac OS X特定选项:**
  -c, --console, --nowindowed
                        为标准I/O打开控制台窗口(默认)。在Windows上,如果第一个脚本是'.pyw'文件,则此选项无效。
  -w, --windowed, --noconsole
                        Windows和Mac OS X:不为标准I/O提供控制台窗口。在Mac OS上,这也触发构建Mac OS .app捆绑包。在Windows上,如果第一个脚本是'.pyw'文件,则此选项自动设置。在*NIX系统上,此选项被忽略。
  --hide-console {hide-early,minimize-early,minimize-late,hide-late}
                        仅限Windows:在控制台启用的可执行文件中,如果程序拥有控制台窗口(即,不是从现有控制台窗口启动的),则引导程序自动隐藏或最小化控制台窗口。
  -i, --icon <FILE.ico or FILE.exe,ID or FILE.icns or Image or "NONE">
                        FILE.ico:将图标应用到Windows可执行文件。FILE.exe,ID:从exe中提取ID的图标。FILE.icns:将图标应用到Mac OS上的.app捆绑包。如果输入的图像文件不是平台格式(Windows上的ico,Mac上的icns),PyInstaller尝试使用Pillow将图标转换为正确的格式(如果安装了Pillow)。使用"NONE"不应用任何图标,从而使OS显示一些默认图标(默认:应用PyInstaller的图标)。这个选项可以多次使用。
  --disable-windowed-traceback
                        在窗口化(无控制台)模式下禁用未处理异常的 traceback 转储(仅限Windows和macOS),并显示一条消息,表明此功能已被禁用。

**Windows特定选项:**
  --version-file FILE   将FILE中的版本资源添加到exe。
  --manifest <FILE or XML>
                        将manifest FILE或XML添加到exe。
  -m <FILE or XML>      --manifest的过时简写。
  -r, --resource RESOURCE
                        向Windows可执行文件添加或更新资源。RESOURCE是一到四个项目,FILE[,TYPE[,NAME[,LANGUAGE]]]. FILE可以是数据文件或exe/dll。对于数据文件,至少必须指定TYPE和NAME。LANGUAGE默认为0,或者可以指定为通配符*以更新给定TYPE和NAME的所有资源。对于exe/dll文件,如果省略TYPE、NAME和LANGUAGE或指定为通配符*,则FILE中的所有资源将被添加/更新到最终可执行文件中。这个选项可以多次使用。
  --uac-admin           使用此选项会创建一个Manifest,将在应用程序启动时请求提升权限。
  --uac-uiaccess       使用此选项允许提升的应用程序与远程桌面一起工作。

**Mac OS特定选项:**
  --argv-emulation      为macOS应用捆绑包启用argv仿真。如果启用,初始的打开文档/URL事件将由引导程序处理,并且传递的文件路径或URL将被追加到sys.argv。
  --osx-bundle-identifier BUNDLE_IDENTIFIER
                         macOS .app 捆绑包标识符用于作为代码签名目的的默认唯一程序名。通常形式是反向域名表示法的层次名称。例如:com.mycompany.department.appname(默认:第一个脚本的基名称)
  --target-architecture, --target-arch ARCH
                         目标架构(仅限 macOS;有效值:x86_64, arm64, universal2)。在支持目标架构的 Python 安装下,启用在 universal2 和 single-arch 版本的冻结应用程序之间切换。如果没有指定目标架构,将针对当前运行的架构。
  --codesign-identity IDENTITY
                         代码签名身份(仅限 macOS)。使用提供的身份对收集的二进制文件和生成的可执行文件进行签名。如果未提供签名身份,则执行 ad-hoc 签名。
  --osx-entitlements-file FILENAME
                         代码签名收集的二进制文件时使用的权限文件(仅限 macOS)。

**很少使用的特殊选项:**
  --runtime-tmpdir PATH
                         在 `onefile` 模式下提取库和支持文件的位置。如果提供了此选项,引导程序将忽略由运行时操作系统定义的任何临时文件夹位置。将在此处创建 ``_MEIxxxxxx`` 文件夹。请仅在您知道自己在做什么时使用此选项。注意,在 POSIX 系统上,PyInstaller 的引导程序不会对给定的路径字符串执行 shell 风格的环境变量扩展。因此,使用环境变量(例如 ``~`` 或 ``$HOME``)在路径中将不起作用。
  --bootloader-ignore-signals
                         告诉引导程序忽略信号,而不是将其转发给子进程。在例如监督进程同时向引导程序和子进程(例如,通过进程组)发送信号的情况下很有用,以避免两次向子进程发送信号。

使用示例

比如代码文件为 main.py,打包生成的文件会放在 dist 目录下

  • 不做特殊要求的打包
    生成可执行文件和依赖文件放在同一目录下

    pyinstaller main.py
  • 生成单文件可执行文件
    只生成一个文件,将依赖文件也打包进可执行文件里面

    pyinstaller -F main.py
  • 执行程序时不启动命令行
    开发的纯图形界面程序,不需要打开命令行窗口

    pyinstaller -w main.py
  • 为程序指定图标(.ico 文件)

    pyinstaller -i 图片文件 main.py

    file

file

pyinstaller:Python 打包可执行文件
Scroll to top