11.5 打包部署

PyInstaller 是 Python 中最常用的打包部署工具之一,它能将 Python 脚本及其依赖项打包成独立的可执行文件(.exe、.app 等),无需目标机器安装 Python 解释器即可运行,极大简化了 Python 程序的分发和部署。

核心功能

  • 将 Python 代码打包为单个可执行文件(或文件夹)
  • 支持 Windows、macOS、Linux 等多平台
  • 自动检测并打包依赖的库和资源文件
  • 支持隐藏控制台窗口、设置图标等定制化选项

安装

pip install pyinstaller

打包流程

执行打包命令后,PyInstaller 会分析脚本依赖的模块和库,在当前目录生成 build(临时文件)和 dist(最终产物)文件夹。如果使用单文件模式(--onefile)会将所有内容压缩到一个可执行文件中。

运行打包结果:

Windows:dist/my_script.exe
macOS/Linux:dist/my_script

示例

# 1. 基础打包(生成文件夹,包含可执行文件和依赖)
pyinstaller my_script.py

# 2. 打包为单个可执行文件(推荐用于简单程序)
pyinstaller --onefile my_script.py

# 3. 隐藏控制台窗口(Windows GUI程序)
pyinstaller --onefile --noconsole my_gui_app.py

# 4. 自定义程序图标(需准备.ico格式文件,Windows)
pyinstaller --onefile --icon=my_icon.ico my_script.py

# 5. 包含额外资源文件(如图片、配置文件)
pyinstaller --onefile --add-data "data/*;data" my_script.py
# 注:Windows用分号分隔路径,Linux/macOS用冒号:"data/*:data"

# 6. 高级配置:通过.spec文件定制(适合复杂项目)
# 生成.spec文件
pyinstaller --name=MyApp --onefile my_script.py
# 编辑.spec文件后重新打包
pyinstaller MyApp.spec

常见问题与解决方案

  • 打包后体积过大:
    • 避免引入不必要的库(如 import *)
    • 使用 --exclude-module 排除不需要的模块(如 --exclude-module matplotlib)
  • 缺少资源文件:
    • 使用 --add-data 显式指定资源
    • 代码中通过 sys._MEIPASS 获取打包后的资源路径(单文件模式)
  • 杀毒软件误报:
    • 部分杀毒软件会将打包后的程序标记为可疑文件,可尝试更换 PyInstaller 版本
  • 跨平台打包限制:
    • 无法在 Windows 上直接打包 macOS/Linux 程序,需在对应系统上操作