Python将代码打包为exe的6种主流方法全攻略

 更新时间:2026年03月27日 09:30:02   作者:likuolei  
目前 Python 程序打包成 Windows 可执行文件(.exe)的方案已经非常成熟,主要有6 种主流/常用的方式,下面小编就和大家详细介绍一下它们的具体应用吧

Python 代码打包为 exe 全攻略(2025–2026 主流方案)

目前 Python 程序打包成 Windows 可执行文件(.exe)的方案已经非常成熟,主要有以下 6 种主流/常用的方式:

排名工具名称是否打包解释器文件体积启动速度兼容性维护活跃度推荐场景难度
1PyInstaller中~大较慢★★★★★非常活跃几乎所有场景首选★★☆
2Nuitka编译为 C → exe中~小很快★★★★☆活跃追求速度 & 体积小的项目★★★
3PyOxidizerRust 打包中~小很快★★★★活跃追求极致启动速度 & 现代化★★★★
4cx_Freeze较慢★★★★一般简单脚本、跨平台需求★★☆
5py2exe中~大较慢★★★较少维护极老项目兼容(Python 3 支持一般)★★☆
6Shiv / PEX不打包,zipapp非常小★★★★活跃命令行工具、分发给有 Python 环境的人★★☆

2025–2026 最推荐的排序(按实际使用量与综合体验):

  • PyInstaller → 稳定、生态好、文档完善
  • Nuitka → 性能更好、体积更小(强烈推荐尝试)
  • PyOxidizer → 极致追求启动速度与现代化
  • cx_Freeze / Shiv(特定场景)

下面逐一详细说明原理、步骤和常见坑。

1. PyInstaller(使用量最大,推荐入门首选)

原理:把 Python 解释器 + 你的代码 + 所有依赖打包到一个文件夹或单个 exe 文件中。运行时会先解压到临时目录,然后执行。

基本步骤

# 1. 安装
pip install pyinstaller
# 2. 简单打包(单个文件)
pyinstaller -F your_script.py
# 3. 常用参数组合(推荐)
pyinstaller \
  -F \                      # 单文件
  --noconsole \             # 无控制台窗口(GUI程序)
  --icon=app.ico \          # 设置图标
  --add-data "images;images" \   # 附加文件夹(注意分号)
  --hidden-import=pkg_resources \ # 解决部分库隐藏导入问题
  --clean \                 # 清理临时文件
  your_script.py

常见坑与解决方案

缺少模块(ModuleNotFoundError)→ 加 --hidden-import=模块名 或修改 .spec 文件

图片、配置文件找不到→ 使用 sys._MEIPASS 获取临时解压路径

import sys
import os
def resource_path(relative_path):
    """获取资源绝对路径(打包前后兼容)"""
    base_path = getattr(sys, '_MEIPASS', os.path.dirname(os.path.abspath(__file__)))
    return os.path.join(base_path, relative_path)

文件体积过大→ 使用 UPX 压缩(--upx-dir)或排除不必要的依赖

杀毒软件误报→ 正常现象,建议用 --onedir 模式或提交白名单

2. Nuitka(性能更好、体积更小)

原理

把 Python 代码翻译成 C 代码,再编译成机器码。不依赖 Python 解释器,启动速度快,体积相对较小。

基本步骤

# 安装(推荐使用最新版)
pip install -U nuitka
# 推荐打包命令
python -m nuitka \
  --standalone \
  --onefile \               # 单文件(推荐)
  --windows-disable-console \  # 无控制台
  --include-data-dir=images=images \
  --plugin-enable=pylint-warnings \
  --windows-icon-from-ico=app.ico \
  your_script.py

优点对比 PyInstaller

  • 启动速度明显更快(接近原生 C 程序)
  • 最终文件体积通常更小
  • 不需要解压到临时目录

缺点

  • 编译时间较长(首次几分钟)
  • 对一些动态特性(eval、exec、某些 metaclass)支持不完美

3. PyOxidizer(现代化、启动最快)

原理:使用 Rust 编写,把 Python 解释器 + 代码嵌入到一个原生可执行文件中,几乎无解压开销。

基本步骤(2025 年推荐方式)

安装 PyOxidizer

pip install pyoxidizer

创建项目

pyoxidizer init-executable myapp
cd myapp

编辑 pyoxidizer.bzl(配置文件)

构建

pyoxidizer build

特点

  • 启动速度极快(几乎无冷启动延迟)
  • 支持嵌入资源、自定义 Python 解释器
  • 适合追求极致体验的桌面应用

缺点

  • 配置相对复杂
  • 社区规模小于 PyInstaller

4. 快速对比总结表(2025–2026 实际体验)

需求首选工具次选工具备注
快速上手、生态好PyInstallercx_Freeze文档最多、问题最容易搜到
追求启动速度 & 体积NuitkaPyOxidizerNuitka 更成熟,PyOxidizer 更现代
命令行工具、分发给运维Shiv / PEXPyInstaller不打包解释器,体积最小
GUI 程序,无控制台PyInstaller -F --noconsoleNuitka --onefile --windows-disable-console
极致性能Nuitka / PyOxidizer

5. 通用避坑指南(强烈建议收藏)

路径问题(最常见坑)

  • 永远不要用相对路径
  • 使用 resource_path() 函数(见 PyInstaller 示例)

第三方库兼容性

  • PyQt5/PySide6 → 必须加 --hidden-import
  • pandas/numpy → 通常自动识别,但有时需加 --include-data-dir
  • tkinter → PyInstaller 一般没问题,Nuitka 需要额外配置

图标不生效

  • 必须是 .ico 格式(Windows)
  • 建议 256×256 多尺寸 ico 文件

杀毒报毒

  • 单文件模式最容易被报
  • 建议用 --onedir 模式分发,或提交给杀毒厂商加白

版本管理

  • 建议用虚拟环境打包
  • 记录 requirements.txt 和 Python 版本

测试建议

  • 在干净的 Windows 虚拟机上测试(无 Python 环境)
  • 测试不同杀毒软件的表现

总结:2025–2026 年打包推荐策略

  • 普通脚本 / 小工具 → PyInstaller 单文件
  • 对启动速度有要求 → Nuitka(强烈推荐)
  • 追求极致现代化 → PyOxidizer
  • 命令行工具给别人用 → Shiv / PEX
  • 老项目兼容 → cx_Freeze 或 py2exe

到此这篇关于Python将代码打包为exe的6种主流方法全攻略的文章就介绍到这了,更多相关Python代码打包为exe内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python实现停车管理系统

    python实现停车管理系统

    这篇文章主要为大家详细介绍了python实现停车管理系统,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-11-11
  • 详解Django+uwsgi+Nginx上线最佳实战

    详解Django+uwsgi+Nginx上线最佳实战

    这篇文章主要介绍了Django+uwsgi+Nginx上线最佳实战,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-03-03
  • Python实现智能图像背景移除功能

    Python实现智能图像背景移除功能

    在电子商务和数字内容创作领域,高质量的背景移除需求正以每年37%的速度增长,本文主要为大家详细介绍了如何使用Python开发一个智能图像背景移除工具,有需要的小伙伴可以了解下
    2025-07-07
  • Python实现简单的俄罗斯方块游戏

    Python实现简单的俄罗斯方块游戏

    这篇文章主要为大家详细介绍了Python实现简单的俄罗斯方块游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • Python模拟登入的N种方式(建议收藏)

    Python模拟登入的N种方式(建议收藏)

    这篇文章主要介绍了Python模拟登入的N种方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-05-05
  • pandas如何将dataframe中的NaN替换成None

    pandas如何将dataframe中的NaN替换成None

    这篇文章主要介绍了pandas如何将dataframe中的NaN替换成None问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • Python实现标记数组的连通域

    Python实现标记数组的连通域

    这篇文章主要为大家详细介绍了如何通过Python实现标记数组的连通域,文中的示例代码讲解详细,对我们学习Python有一定的帮助,需要的可以参考一下
    2023-04-04
  • TensorFlow2.4完成Word2vec词嵌入训练方法详解

    TensorFlow2.4完成Word2vec词嵌入训练方法详解

    这篇文章主要为大家介绍了TensorFlow2.4完成Word2vec词嵌入训练方法详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11
  • Pytorch反向传播中的细节-计算梯度时的默认累加操作

    Pytorch反向传播中的细节-计算梯度时的默认累加操作

    这篇文章主要介绍了Pytorch反向传播中的细节-计算梯度时的默认累加操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • Python中unittest用法实例

    Python中unittest用法实例

    这篇文章主要介绍了Python中unittest用法,较为详细的讲述了unittest中相关函数的用法及完整实例,需要的朋友可以参考下
    2014-09-09

最新评论