将 Python 程序打包为 exe (可执行程序)

前言:

  • 大家都知道,Python 是一种脚本语言,也就是解释型的语言,需要解释器来进行解释以后才可以执行,而 Python 源代码需要在 Python 虚拟机上面运行,但是我们做好的程序,不可能给用户使用的时候还让他安装一个 Python 环境,所以今天我们讲解如何将 Python 程序打包为 exe 可执行文件。
  • PyInstaller 是一个非常流行的第三方工具,它可以将 Python 程序打包成独立的可执行文件,使得程序能够在没有安装 Python 解释器的环境中运行。这对于分发 Python 应用程序来说非常有用,因为用户不需要关心如何安装 Python 环境和依赖包。

项目地址

PyInstaller 可在 PyPI 上使用。您可以通过 pip 安装它:

1
pip install -U pyinstaller

验证安装

pyinstaller 现在,在所有平台上,命令都应该存在于执行路径上。要验证这一点,请输入命令

1
pyinstaller --version

结果类似于:6.3.0

环境要求

  • PyInstaller 可以在 Windows 8 或更高版本中运行(Windows 7 也可以使用,但不受支持)。它可以创建图形化窗口应用程序(不需要命令窗口的应用程序)。
  • PyInstaller 在 Windows 系统中需要两个 Python 模块。它需要 Windows 的 PyWin32 pypiwin32 Python 扩展。如果您使用 pip 安装 PyInstaller,并且尚未安装 PyWin32,则会自动安装 pypiwin32。 PyInstaller 还需要 pefile 软件包。
  • Python 版本:建议使用 Python3.x

PyInstaller 关键特性

  1. 跨平台兼容:PyInstaller 支持多个操作系统,包括 Windows、Linux 和 macOS。
  2. 无需源代码:打包的可执行文件中不包含源代码,这可以保护源代码不被轻易查看。
  3. 支持依赖包含:PyInstaller 会自动分析你的 Python 程序,找到所有的依赖关系,并将它们包含到打包的可执行文件中。
  4. 可选打包模式:支持 onefile 和 onedir 两种打包模式。在 onefile 模式下,所有的文件都会被打包进一个单一的可执行文件中;而在 onedir 模式下,会生成一个包含所有依赖文件的文件夹。
  5. 自定义打包:PyInstaller 允许用户通过编辑 .spec 文件来自定义打包过程,例如添加数据文件、更改路径、添加图标等等。
  6. UPX 集成:PyInstaller 可以集成 UPX 压缩工具来减小最终可执行文件的大小。

参数介绍

简介

官网参数详细介绍,在使用 pyinstaller 打包 Python 项目的时候,需要指定一些参数,详细介绍请参考官网。也可以通过 pyinstaller -h 命令查看 pyinstaller 的参数使用介绍。

常规选项

  1. --help-h:显示帮助信息和所有可用的命令行选项。
  2. --version:显示 PyInstaller 的版本号。
  3. --onefile-F:生成单个可执行文件。默认情况下,PyInstaller 会创建一个包含可执行文件和一个包含所有依赖的文件夹。使用此参数后,所有内容会被打包进一个文件。
  4. --windowed-w:对于图形用户界面(GUI)应用程序,使用此参数可以防止在运行程序时出现命令行窗口。
  5. --console-c:创建一个控制台程序,这是默认选项。
  6. --icon=ICON_FILE-i ICON_FILE:添加一个图标(ICON_FILE)到生成的可执行文件中。ICON_FILE 必须是 .ico 格式的文件(在 Windows 上),或者是 .icns(在 macOS 上)。
  7. --name=NAME:指定输出的可执行文件名称。如果不使用此选项,PyInstaller 会使用脚本名作为可执行文件的名字。
  8. --add-data=<SRC;DEST>-a <SRC;DEST>:将额外的数据文件或文件夹添加到打包的输出中。SRC 是源文件或文件夹的路径,DEST 是目的地路径。在 Windows 中使用分号,在 UNIX 类系统中使用冒号分隔 SRC 和 DEST。
  9. --upx-dir=UPX_DIR:如果你已经安装了 UPX,可以使用此参数指定 UPX 可执行文件的路径,否则 PyInstaller 会在 PATH 环境变量中搜索。
  10. --clean:清除 PyInstaller 缓存和临时文件,然后创建新的可执行文件。
  11. --noconfirm:在创建可执行文件之前,不要求用户确认删除先前的输出目录。
  12. --hidden-import=MODULENAME--hiddenimport MODULENAME:PyInstaller 分析脚本时可能会错过一些导入。如果发现缺少模块错误,可以使用此选项强制添加隐藏的导入。
  13. --runtime-tmpdir PATH:指定在运行时 PyInstaller 解包临时文件的目录。
  14. --distpath DIR:指定打包后的输出目录。默认情况下是脚本所在目录下的 dist 目录。
  15. --workpath WORKPATH:指定 PyInstaller 用来存放工作文件的临时目录。
  16. --specpath DIR:指定 .spec 文件的输出目录。如果不指定,将使用脚本所在目录。
  17. --paths=DIR:在分析时添加搜索路径,这可以用来指示 PyInstaller 在哪里查找导入的模块。
  18. --runtime-hook=FILE:添加一个自定义 Python 脚本,在运行时作为钩子执行。
  19. --exclude-module=MODULENAME:排除特定的 Python 模块。

常用参数

-D, –onedir 创建包含可执行文件的单文件夹包 (默认)
-F, –onefile 创建一个可执行文件(exe)
-c, –console, –nowindowed 使用控制台窗口 (默认)
-w, –windowed, –noconsole 使用窗口显示
-i 设置打包 exe 的图标,默认使用的是 Python 的图标

单个 py 文件打包

  • 运行以下代码进行打包
    1
    pyinstaller -F -i calc.ico calc.py

    参数解释:-i calc.ico 表示程序图标及图标地址;calc.py 表示你的 Python 程序文件名

  • 打包结束会后,会在项目目录下发现多了 distbuild 两个目录文件和一个 *.spec 的文件。
  • 打开 dist 目录,可以发现下面多了一个 dcalc.exe 的可执行文件,双击运行即可!
  • ⚠️注意:如果原本的程序中使用到了相应的资源,需要复制到 dist 目录下,否则程序会无法运行!
  • 如果不想显示控制台,打包的时候可以加上 -w 参数,例如:
    1
    pyinstaller -F -w -i calc.ico calc.py

    此时打包生成的 exe 程序执行时不会出现控制台窗口。

简介

  • UPX 是一款免费、安全、可移植、可扩展、高性能的可执行加壳程序,适用于多种可执行格式。
  • UPX(Ultimate Packer for eXecutables)是一个开源的可执行文件压缩器,用于减小 Windows、Linux、macOS 等操作系统上可执行文件的体积。它支持多种文件格式,包括但不限于 Windows 的 EXE、DLL 和 Linux 的 ELF 文件。UPX 能够压缩文件而不丧失其自身解压缩的能力,这意味着压缩后的文件可以自解压并正常运行,无需外部解压工具。
  • UPX 是一种先进的可执行文件压缩器。UPX 通常会将程序和 DLL 的文件大小减少约 50%-70%,从而减少磁盘空间、网络加载时间、下载时间以及其他分发和存储成本。

UPX 的特点

  1. 高压缩比:使用 UPX 压缩的文件通常可以显著减小体积,这对于带宽有限或存储空间有限的环境非常有用。
  2. 快速解压:尽管文件被压缩,但在运行时能够迅速解压,对程序启动时间影响很小。
  3. 跨平台:支持多个操作系统平台的可执行文件压缩。
  4. 易用性:命令行界面简单,易于使用。
  5. 透明压缩:用户不会注意到程序已被压缩,因为压缩的程序在运行时自动解压。
  6. 可逆性:UPX 也支持解压缩先前压缩的文件,还原到它们的原始状态。

下载并安装

使用 UPX

  • 在使用 PyInstaller 时添加 --upx-dir 参数指向 UPX 的安装路径,如:
    1
    pyinstaller --onefile --windowed --upx-dir='D:\Program Files\upx-4.2.2-win64' -i upload.ico upload_csv.py
  • PyInstaller 的 --upx-dir 选项应该指向 UPX 的安装目录,而不是 UPX 可执行文件本身。因此,你只需要指定到 upx.exe 所在的目录,而不是包括 upx.exe 文件的完整路径。
  • 确保 UPX 可执行文件的路径没有错误,并且已经被添加到系统的环境变量中,或者在调用 PyInstaller 时明确指定 --upx-dir 路径。
  • 如果你已经将 UPX 的路径添加到系统的环境变量中,你可以省略 --upx-dir 参数,因为 PyInstaller 会自动搜索系统的环境变量来找到 UPX。

图标制作

  1. 阿里巴巴矢量图标库下载适合的图标
  2. 上传下载的图标到 ICO 图标生成,在线生成 ico 图标,然后下载下来即可!