PyInstaller 是一个用来将 Python 应用程序及其所有依赖项打包成一个可执行程序的工具;用户无需安装 Python 解释器或任何模块即可运行打包的应用程序。

通常我们执行 Python 脚本时,需要有 Python 环境,并要预先安装好需要使用的各个模块;这种情况下把脚本给非专业人士使用时可能造成不便。我们可以将程序连同 Python 环境以及程序运行时所需的依赖项打包到一个单独的 exe 可执行文件中,这样分发程序就变得容易多了;从某种程度上说,还能起到保护程序源码不被泄露的作用。

PyInstaller 用法

pyinstaller.exe命令语法:

pyinstaller [options] scriptfile [scriptfile …] | specfile

只列出 Windows 系统下常用的选项,完整列表请查阅官方文档:

位置参数

  • scriptfile 要处理的 Python 脚本文件
  • specfile .spec 文件

常用选项

  • -h,--help 显示帮助信息并退出
  • -v,--version 显示程序的版本信息并退出
  • --distpath DIR 生成的捆绑程序放置路径,默认./dist
  • --workpath WORKPATH 临时文件的放置路径,默认./build
  • --clean 在构建之前清理 PyInstaller 缓存并删除临时文件
  • --log-level LEVEL 构建时控制台消息的详细程度

    LEVEL 可以是 TRACE、DEBUG、INFO、WARN、DEPRECATION、ERROR、FATAL 之一(默认值:INFO)。

  • -D, --onedir 创建包含可执行文件的单文件夹包(默认)
  • -F, --onefile 创建只有一个文件捆绑的可执行文件
  • --specpath DIR 存储生成规范文件的文件夹(默认:当前目录)
  • -n, --name NAME 分配给捆绑应用程序和规范文件的名称(默认值:第一个脚本的名称)
  • --add-data SOURCE:DEST 包含要添加到应用程序的数据文件或目录

    参数值应采用SOURCE:DEST格式,其中SOUCE是要收集的文件(或目录)的路径,DEST是相对于顶级应用程序目录的目标目录,两个路径之间以冒号 (:) 分隔。要将文件放入顶级应用程序目录,请使用.作为DEST;此选项可多次使用。

  • --add-binary SOURCE:DEST 要添加到可执行文件中的附加二进制文件

    参考 --add-data 选项,此选项可多次使用;

  • -p, --paths DIR 用于搜索导入文件的路径

    允许使用多个路径,用:分隔或多次使用此选项;

  • --hidden-import, --hiddenimport MODULENAME 指定代码中不可见的导入
  • --collect-submodules MODULENAME 收集指定包或模块的所有子模块
  • --collect-data, --collect-datas MODULENAME 收集指定包或模块的所有数据
  • --collect-binaries MODULENAME 收集指定包或模块的所有二进制文件
  • --collect-all MODULENAME 收集指定包或模块的所有子模块、数据文件和二进制文件
  • --exclude-module EXCLUDES 忽略模块或吧包
  • --splash IMAGE_FILE 为应用程序添加一个包含图像 IMAGE_FILE 的启动画面

    该启动画面可以在解压过程中显示进度;

  • -c, --console, --nowindowed 打开控制台窗口(默认)
  • -w, --windowed, --noconsole 不提供控制台窗口
  • -i, --icon <FILE.ico or FILE.exe,ID or Image or "NONE">

    为生成的 Windows 可执行文件添加图标,默认使用 PyInstaller 的图标;

    • FILE.ico:将图标应用于 Windows 可执行文件
    • FILE.exe,ID:从 exe 文件中提取指定 ID 的图标。
    • Image:如果输入的图像文件格式不符合 ico,PyInstaller 会尝试使用 Pillow 将图标转换为正确的格式(前提是已安装 Pillow)
    • NONE:表示不添加任何图标
  • --version-file FILE 将版本资源从 FILE 添加到生成的 exe 文件
  • --manifest <FILE or XML> 将 manifest 文件添加到生成的 exe 文件

常用示例

将 myscript.py 打包成一个单一的 exe 文件,不使用程序图标:

pyinstaller -F -i NONE d:\myscript.py