打包步骤

  1. 安装 PyInstaller

    通过 pip 安装 PyInstaller:

    pip install pyinstaller
  2. 项目结构

    假设项目文件结构如下:

    project_folder/
    ├── main.py          # 主程序
    ├── activate3.py     # UI 类
    ├── new_ui.py        # 新窗口 UI 类
    ├── secret.key       # 加密密钥文件
    ├── resources/       # 资源文件夹 (包含一些图像或其他资源)
    │   ├── image1.png
    │   ├── image2.png
  3. 编写 main.spec 文件

    当你需要更多自定义打包选项时,可以使用 PyInstaller 的 .spec 文件。这个文件允许你排除不必要的库,添加资源文件等。

    编写示例 main.spec 文件

    # -*- mode: python ; coding: utf-8 -*-
    
    block_cipher = None
    
    # 包含项目中的资源文件,如图片、密钥文件等
    a = Analysis(
       ['main.py'],  # 你的主程序文件
       pathex=['.'],  # 当前路径
       binaries=[],
       datas=[
           ('secret.key', '.'),  # 包含密钥文件
           ('resources/*', 'resources')  # 包含资源文件夹中的所有文件
       ],
       hiddenimports=[],
       hookspath=[],
       hooksconfig={},
       runtime_hooks=[],
       excludes=['tkinter', 'matplotlib', 'numpy'],  # 剔除不必要的库
       win_no_prefer_redirects=False,
       win_private_assemblies=False,
       cipher=block_cipher,
    )
    pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher)
    
    exe = EXE(
       pyz,
       a.scripts,
       [],
       exclude_binaries=True,
       name='my_program',  # 输出的 exe 名称
       debug=False,
       bootloader_ignore_signals=False,
       strip=False,
       upx=True,
       console=False,  # 设置为 GUI 程序,避免弹出命令行窗口
    )
    
    coll = COLLECT(
       exe,
       a.binaries,
       a.zipfiles,
       a.datas,
       strip=False,
       upx=True,
       upx_exclude=[],
       name='my_program'  # 生成的可执行文件的文件夹
    )

    解释:

    • datas: 用于添加额外的资源文件,比如图片、加密密钥等。
    • excludes: 用于排除不必要的库,比如 tkinter, matplotlib, numpy 等。
    • console=False: 生成 GUI 程序,而不是命令行程序。
    • name: 指定生成的 .exe 文件名称为 my_program
  4. 运行 PyInstaller 打包

    运行以下命令来打包项目(使用上面写的 .spec 文件):

    pyinstaller main.spec

    这个命令将会生成一个 dist/my_program 文件夹,其中包含打包好的 .exe 文件。

  5. 可选:只生成单个 .exe 文件

    如果你想将所有文件打包成单个 .exe 文件,可以通过 --onefile 选项:

    pyinstaller --onefile main.spec
  6. 打包结果

    执行完毕后,你会在 dist 文件夹中找到打包好的 my_program.exe 文件。

说明:

  • 你可以通过 --onefile 选项将所有依赖打包到一个 .exe 文件中,这样就不需要额外的文件夹。
  • 通过 excludes 参数排除不需要的库可以减小打包后文件的大小,例如排除 tkinter, matplotlib, numpy 等库,如果这些库不是你项目所需要的。
  • 通过 datas 参数包含资源文件(例如密钥文件和图片)到打包的程序中。

完整打包示例:

假设你有一个 main.py 项目文件、一个 secret.key 加密密钥文件、以及一些图像资源文件。你可以通过以下步骤来打包:

pyinstaller --onefile --windowed --add-data "secret.key;." --add-data "resources/*;resources/" --exclude-module tkinter --exclude-module numpy --exclude-module matplotlib main.py
  • --onefile: 将所有内容打包成一个 .exe 文件。
  • --windowed: 禁用命令行窗口,仅针对 GUI 程序。
  • --add-data: 包含额外的资源文件。
  • --exclude-module: 排除不需要的库,如 tkinter, numpy, matplotlib

完成后,你将在 dist 文件夹中找到 main.exe,这个文件就是打包后的可执行文件。