跳转至

PyInstaller打包可执行Exe

使用 PyInstaller 将 Python 脚本打包为 EXE 可执行文件,核心流程与常见命令如下:

1. 安装 PyInstaller

打开终端或命令行,运行:

pip install pyinstaller

2. 基础打包命令

在脚本所在目录下执行以下命令:

  • 单文件打包(推荐,生成单个 .exe)

    pyinstaller --onefile your_script.py
    
        *简写:pyinstaller -F your_script.py*
    

  • 隐藏控制台窗口(适用于 GUI 界面程序,如 Tkinter、PyQt)

    pyinstaller --onefile --noconsole your_script.py
    
        *简写:pyinstaller -F -w your_script.py*
    

  • 添加自定义图标(仅支持 .ico 格式)

    pyinstaller --onefile --icon=logo.ico your_script.py
    
        *简写:pyinstaller -F -i logo.ico your_script.py*
    

3. 生成产物路径

打包完成后,目录中会生成多个文件夹: * dist/:存放最终生成的 your_script.exe(只需打包分发此文件或此文件夹即可)。 * build/:存放打包过程中的临时文件,打包成功后可直接删除。 * your_script.spec:打包配置文件,用于复杂的高级打包需求。


💡 进阶避坑指南

动态资源打包: 如果程序中读取了外部图片、文本等资源文件,直接打包 静态路径 会报错。需要在代码中加入路径转换逻辑:

import os
import sys

def get_resource_path(relative_path):
    if hasattr(sys, '_MEIPASS'):
        return os.path.join(sys._MEIPASS, relative_path)
    return os.path.join(os.path.abspath("."), relative_path)
并在打包时通过 --add-data 参数将资源文件注入进去: pyinstaller -F --add-data "img.png;." your_script.py (Windows 系统用分号 ; 分隔,Mac/Linux 用冒号 :)

常见问题 原因与对策
报 ModuleNotFoundError 代码使用了动态导入。在打包命令中加上 --hidden-import=缺失的模块名
EXE 文件体积过大 因为 PyInstaller 会把当前环境下的所有第三方库一起打包。建议在 PipenvConda 虚拟环境中进行纯净打包。
跨平台问题 Windows 只能打包出 .exe,Mac 只能打包出 .app。必须在对应的操作系统上运行 PyInstaller。

```

重新打包之前记得删除dist文件夹