使用PyInstaller将Python脚本打包成exe的新手入门指南

 更新时间:2026年03月29日 09:53:30   作者:kady666  
用 PyInstaller 打包成单个 exe 文件,双击就能运行,省心又专业,本文从零开始手把手教你用 PyInstaller 打包 Python 程序,解决新手常遇到的坑,希望对大家有所帮助

辛辛苦苦写好的 Python 脚本,发给同事却要让他装环境?用 PyInstaller 打包成单个 exe 文件,双击就能运行,省心又专业。本文从零开始,手把手教你用 PyInstaller 打包 Python 程序,解决新手常遇到的坑。

一、为什么需要 PyInstaller?

写了个自动化脚本,发给同事,他说“Python 是啥?怎么运行?” 如果你不想让每个人都安装 Python 和依赖包,PyInstaller 就是救星。

PyInstaller 的作用:把 Python 脚本及其依赖打包成一个独立的可执行文件(Windows 下是 .exe),用户无需 Python 环境,双击即可运行。

支持平台:Windows、macOS、Linux。

二、安装 PyInstaller

最简单的方式是用 pip 安装:pip install pyinstaller

如果下载慢,可以换国内源:pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pyinstaller

安装完成后,在命令行输入以下命令确认是否成功:pyinstaller --version

正常会显示版本号,如 6.7.0

三、快速上手:打包一个最简单的脚本

假设我们有一个名为 hello.py 的脚本,内容如下:

print("Hello, PyInstaller!")
input("按回车键退出...")

进入脚本所在目录,打开命令行,执行:

pyinstaller hello.py

命令执行后,会生成两个目录:

  • build:临时文件目录(可忽略)
  • dist:打包好的可执行文件就在这里

在 dist/hello 目录下(Windows 为 dist/hello)找到 hello.exe(或 hello),双击运行,就能看到输出结果。

注意:默认生成的是一个文件夹,里面包含 exe 和一堆依赖文件。如果想生成单个 exe 文件,加上 -F 参数:

pyinstaller -F hello.py

此时 dist 目录下只有一个 hello.exe,双击就能运行。

四、常用参数详解

-F, --onefile:打包成单个 exe 文件

-D, --onedir:打包成一个文件夹(默认)

-w, --windowed:不显示控制台窗口(适用于 GUI 程序)

-i, --icon:指定 exe 的图标(如 -i icon.ico

--name:指定生成的 exe 文件名

--add-data:添加额外数据文件(如图片、配置文件)

--hidden-import:手动导入 PyInstaller 未能自动发现的模块

五、实战:打包带依赖和 GUI 的程序

假设我们有一个简单的 GUI 程序 gui_app.py,用 tkinter 做了一个小窗口,还依赖一个外部的 config.json 文件。

import tkinter as tk
import json

with open("config.json", "r", encoding="utf-8") as f:
    config = json.load(f)

root = tk.Tk()
root.title(config.get("title", "My App"))
label = tk.Label(root, text=config.get("text", "Hello"))
label.pack()
root.mainloop()

config.json内容:

{
    "title": "我的应用",
    "text": "欢迎使用 PyInstaller"
}

1. 打包单个 exe,不显示控制台窗口

pyinstaller -F -w --add-data "config.json;." gui_app.py

解释

  • -F:单文件
  • -w:无控制台窗口
  • --add-data "config.json;.":将 config.json 文件添加到打包中,并放在 exe 同目录(; 是 Windows 下的分隔符,Linux/macOS 用 :

2. 解决路径问题

程序里如果使用相对路径读取配置文件,打包后可能会找不到。推荐在代码中自动获取正确的路径:

import sys
import os

def resource_path(relative_path):
    """获取资源的绝对路径,适配 PyInstaller 打包"""
    try:
        base_path = sys._MEIPASS  # PyInstaller 临时解压目录
    except AttributeError:
        base_path = os.path.abspath(".")
    return os.path.join(base_path, relative_path)

# 使用
config_path = resource_path("config.json")
with open(config_path, "r") as f:
    config = json.load(f)

然后在打包时,添加 --add-data 并告知 PyInstaller 将文件放到 _MEIPASS 目录下。

pyinstaller -F -w --add-data "config.json;." gui_app.py

这样即使打包成单个 exe,程序也能正确读取到配置文件。

六、常见问题与解决方案

1. 打包后运行报错:ModuleNotFoundError: No module named 'xxx'

原因:PyInstaller 没有自动识别到某些依赖模块。

解决:使用 --hidden-import 手动指定。

pyinstaller -F --hidden-import=pandas --hidden-import=openpyxl my_script.py

2. 打包文件太大,怎么办?

使用 --exclude-module 排除不需要的模块(如 matplotlibnumpy 很占体积)。

如果用了虚拟环境,在干净的环境中打包,避免打包多余包。

3. 图标不生效

确保图标是 .ico 格式(Windows 下),其他格式可能不识别。打包时:

pyinstaller -F -i myicon.ico my_script.py

4. 打包后双击闪退

闪退通常是因为程序报错后立即退出。可以在代码开头加 try...except 捕获错误并暂停:

try:
    # 你的代码
except Exception as e:
    print("Error:", e)
    input("按回车键退出...")

这样就能看到错误信息,方便排查。

七、进阶:使用 spec 文件自定义打包

当参数很多时,可以生成 .spec 配置文件,然后通过 pyinstaller xxx.spec 打包,方便修改和复用。

生成 spec 文件:

pyinstaller hello.py # 会生成 hello.spec

编辑 hello.spec,修改 a.datas 添加数据文件,修改 exe 设置图标等。然后执行:

pyinstaller hello.spec

八、总结

需求命令
基础打包pyinstaller script.py
打包成单个 exepyinstaller -F script.py
无控制台窗口pyinstaller -F -w script.py
指定图标pyinstaller -F -i icon.ico script.py
添加额外文件--add-data "file;."
隐藏导入--hidden-import=module

最佳实践

  • 在虚拟环境中打包,减少体积。
  • 使用 -F 生成单文件,便于分发。
  • 使用 resource_path 函数处理文件路径。
  • 遇到闪退时,先用控制台版本(不加 -w)调试。
  • 对于大型项目,用 spec 文件管理配置。

现在,你可以把自己的 Python 脚本打包成 exe 发给任何人,再也不用担心环境问题了。快去试试吧!

到此这篇关于使用PyInstaller将Python脚本打包成exe的新手入门指南的文章就介绍到这了,更多相关PyInstaller打包Python脚本内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 使用Python为Word添加文本与图片水印

    使用Python为Word添加文本与图片水印

    文档水印是办公自动化工作流中的常见需求,本教程演示如何使用 Python 为 Word文档添加文本和图片水印,这里介绍的方法适用于批量处理公司报告、添加保密标识或创建品牌文档模板,需要的朋友可以参考下
    2026-03-03
  • Python分析最近大火的网剧《隐秘的角落》

    Python分析最近大火的网剧《隐秘的角落》

    这篇文章主要介绍了Python分析最近大火的网剧《隐秘的角落》,本文通过实例代码图文相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-07-07
  • Win系统PyQt5安装和使用教程

    Win系统PyQt5安装和使用教程

    这篇文章主要介绍了Win系统PyQt5安装和使用教程,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-12-12
  • 使用python itchat包爬取微信好友头像形成矩形头像集的方法

    使用python itchat包爬取微信好友头像形成矩形头像集的方法

    今天小编就为大家分享一篇使用python itchat包爬取微信好友头像形成矩形头像集的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-02-02
  • 手动实现把python项目发布为exe可执行程序过程分享

    手动实现把python项目发布为exe可执行程序过程分享

    这篇文章主要介绍了手动实现把python项目发布为exe可执行程序过程分享,本文使用C语言实现了一个简洁的Python打包程序,需要的朋友可以参考下
    2014-10-10
  • Python学习之字符串函数使用详解

    Python学习之字符串函数使用详解

    Python的友好在于提供了非常好强大的功能函数模块,对于字符串的使用,同样提供许多简单便捷的字符串函数。Python 字符串自带了很多有用的函数,快来跟随小编学习一下这些函数的应用详解吧
    2021-12-12
  • Python使用sorted排序的方法小结

    Python使用sorted排序的方法小结

    这篇文章主要介绍了Python使用sorted排序的方法,结合三个实例分析了Python使用sorted方法进行元素排序操作的相关实现技巧,需要的朋友可以参考下
    2017-07-07
  • Python实现批量将PPT转换成长图

    Python实现批量将PPT转换成长图

    这篇文章主要为大家详细介绍了如何利用Python实现批量将PPT转换成长图,并且图片名称与PPT文件名称相同,保存位置相同,感兴趣的小伙伴可以了解下
    2023-08-08
  • python模拟菜刀反弹shell绕过限制【推荐】

    python模拟菜刀反弹shell绕过限制【推荐】

    这篇文章主要介绍了利用python模拟菜刀反弹shell绕过限制,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-06-06
  • Python中如何替换字典中的值

    Python中如何替换字典中的值

    这篇文章主要介绍了Python中替换字典中的值,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-03-03

最新评论