Python 代码打包为 EXE 完全指南

Python 代码打包为 exe 完全指南(2025–2026 年最新实用版)

目前最主流、最稳定的几种打包方式对比(按推荐顺序):

排名工具优点缺点/坑点适合场景推荐指数 (2026)
1PyInstaller兼容性最好、社区最大、文档最全生成的 exe 偏大、启动稍慢几乎所有场景(首选)★★★★★
2Nuitka启动速度最快、文件体积较小、接近原生性能编译时间长、对依赖处理更严格对启动速度敏感的项目★★★★☆
3cx_Freeze跨平台支持好、配置灵活社区活跃度低、文档较老需要高度自定义打包逻辑★★★☆☆
4PyOxidizer极致体积优化、Rust 底层配置复杂、生态不成熟极致追求小体积的场景★★☆☆☆
5Shiv / PEX生成 .pex 文件(类似 jar),不生成 exe需要 Python 环境才能运行服务器/内部工具分发(非桌面程序)★★☆☆☆

绝大多数人(尤其是 Windows 桌面程序)2026 年仍然首选:PyInstaller

下面给出最实操的完整流程(以 PyInstaller 为主,附 Nuitka 补充)。

一、PyInstaller 完整打包流程(推荐)

步骤 1:环境准备
# 建议使用干净的虚拟环境 python -m venv pack-env # Windows pack-env\Scripts\activate # macOS/Linuxsource pack-env/bin/activate # 安装最新版(2026 年建议 ≥ 6.0) pip install --upgrade pyinstaller 
步骤 2:写一个最简单的测试程序(main.py)
# main.pyimport sys import tkinter as tk from tkinter import messagebox defmain(): root = tk.Tk() root.title("我的第一个打包程序") root.geometry("400x300") label = tk.Label(root, text="Hello from EXE!", font=("微软雅黑",16)) label.pack(pady=50) btn = tk.Button(root, text="点我", command=lambda: messagebox.showinfo("提示","打包成功!")) btn.pack() root.mainloop()if __name__ =="__main__": main()
步骤 3:第一次打包(最简单方式)
# 单文件模式(推荐给新手) pyinstaller -F main.py # 常用参数组合(强烈推荐) pyinstaller -F \ --noconfirm \ --clean \ --windowed \# 无控制台窗口(GUI程序必加) --icon=app.ico \# 可选:自定义图标 --name=MyNoteApp \# exe 文件名 --add-data "data;data"\# 如果有资源文件夹(注意分号是 Windows 用,Linux/macOS 用冒号) main.py 

打包完成后,文件出现在:

dist/ └── MyNoteApp.exe ← 这就是最终的 exe 
步骤 4:常见问题 & 解决方案(2026 年高频坑)
问题原因解决方案(最有效写法)
exe 启动闪退缺少依赖 / 路径错误--log-level=DEBUG 看日志;或用 --onedir 先测试
第三方库(如 pandas、pytorch)打包失败hook 不全pip install pyinstaller-hooks-contrib;必要时手动写 .spec 文件
中文路径/文件名乱码编码问题脚本保存为 UTF-8;打包时加 --utf8(较新版本支持)
exe 体积过大(100MB+)打包了整个 site-packages--exclude-module 排除无用模块;用 UPX 压缩(--upx-dir
杀毒软件报毒特征码误杀正常现象,用 --noupx 关闭压缩;或提交文件给杀毒厂商白名单
tkinter / PyQt 等 GUI 黑屏/不显示缺少资源--add-data "tcl;tcl"--add-data "tk;tk"(tkinter 常见)
步骤 5:推荐的完整 .spec 文件写法(进阶)
# myapp.spec# 运行一次 pyinstaller main.py 后会自动生成 .spec 文件,修改后用下面命令重新打包:# pyinstaller myapp.spec block_cipher =None a = Analysis(['main.py'], pathex=[], binaries=[], datas=[('images/*','images'),('config.yaml','.')], hiddenimports=['PIL._tkinter_finder'],# tkinter + pillow 常见补丁 hookspath=[], hooksconfig={}, runtime_hooks=[], excludes=['torch','tensorflow'],# 排除掉不需要的重量级库 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, a.binaries, a.zipfiles, a.datas,[], name='我的记事本', debug=False, bootloader_ignore_signals=False, strip=False, upx=True,# 需要先安装 UPX console=False,# GUI 程序设为 False disable_windowed_traceback=False, argv_emulation=False, target_arch=None, codesign_identity=None, entitlements_file=None, icon='app.ico',)

二、Nuitka 快速补充(追求速度时用)

pip install nuitka # 最常用命令(单文件 + 优化) python -m nuitka \ --standalone \ --onefile \ --windows-disable-console \ --include-package-data=tkinter \ --windows-icon-from-ico=app.ico \ --output-dir=dist \ main.py 

Nuitka vs PyInstaller 启动速度对比实测平均值,2026 年数据):

  • PyInstaller 单文件:启动 3–8 秒
  • Nuitka 单文件:启动 0.5–2 秒(明显更快)

三、2026 年最务实建议总结

需求推荐工具一句话命令建议
最简单、最稳PyInstallerpyinstaller -F --windowed --name=MyApp main.py
启动速度最重要Nuitkapython -m nuitka --onefile --windows-disable-console main.py
体积最小Nuitka + UPX--enable-plugin=upx
有大量第三方库(pandas等)PyInstaller先用 --onedir 测试,再转单文件
需要开控制台(命令行工具)PyInstaller去掉 --windowed / --noconsole

需要我帮你针对某个具体项目(比如带 pandas、带 tkinter、带 requests、带 PyQt6 等)写出最优的打包命令吗?
或者你现在遇到什么打包报错/闪退问题?直接贴出来,我帮你分析。

Read more

在ESP32-S3部署mimiclaw,基于deepseek并用飞书机器人开展对话-feishu

在ESP32-S3部署mimiclaw,基于deepseek并用飞书机器人开展对话-feishu

最近mimiclaw火爆,其开发团队也在密集更新,我看3天前已经可以用“飞书机器人”对话交互了。 目前网络上能查到的部署资料相对滞后,现在将飞书机器人的部署整理如下: 1. 前提 已经安装好ESP-IDF,并支持vscode编译esp32固件。 2. api-key准备 * 注册deepseek, * 创建APIkey, * 并充值,新注册的用户余额为零,无法使用 3. 飞书机器人 我是在飞书个人版中,创建的机器人。 1. 访问飞书开放平台,单击创建企业自建应用,填写应用名称和描述,选择应用图标,单击创建。 2. 左侧导航栏单击凭证与基础信息 页面,复制App ID(格式如 cli_xxx)和App Secret。 3. 配置事件订阅。 1. 在飞书开放平台左侧导航栏单击事件与回调,在事件配置页签中单击订阅方式,选择使用 长连接 接收事件,单击保存。 2. 在事件配置页面,单击添加事件,

By Ne0inhk

基于大疆MSDK实现的无人机视觉引导自适应降落功能

基于大疆MSDK实现的无人机视觉引导自适应降落功能 概述 最初需求:想要无人机在执行完航线任务后,一键落到一个指定的位置,简化人工控制。 实现一套完整的无人机自主降落功能,通过虚拟摇杆控制使无人机飞向指定位置,再利用视觉识别引导无人机精确降落到具体位置。本文中采用自适应降落策略,根据高度动态调整精度要求和下降速度,以实现安全、精确的降落。 核心点: * 虚拟摇杆导航替代FlyTo功能 * 双轴(X/Y)位置偏移实时调整 * 高度自适应降落策略 * 视觉识别引导定位 * 智能避障管理 系统架构 整体流程 否 是 高于50m 20-50m 5-20m 低于5m 是 否 是 否 否 是 用户触发Return to Vehicle 获取无人机GPS位置 计算与目标点距离 启动虚拟摇杆导航 飞向目标位置 5m/s 距离小于10m? 开始自适应降落 视觉识别系统 计算X/Y偏移量

By Ne0inhk
OpenClaw 钉钉群聊多机器人配置完全指南

OpenClaw 钉钉群聊多机器人配置完全指南

OpenClaw 钉钉群聊多机器人配置完全指南 在团队协作中,配置多个专用机器人可以显著提升工作效率——不同的机器人可以分别负责写作、编码、数据分析等不同任务。本文将详细介绍如何在使用OpenClaw的钉钉群聊中配置多个任务机器人,并进一步讲解如何为每个机器人赋予独特的性格和工作规范。 一、钉钉端配置 首先,我们需要在钉钉开放平台创建多个任务机器人。 1.1 创建机器人 1. 按照上述步骤,根据实际需求创建多个机器人。 机器人创建完成后,务必记下 Client ID 和 Client Secret,这些信息后续配置会用到。 访问 钉钉开发者平台,点击立即创建按钮创建任务机器人。 二、OpenClaw端配置 完成钉钉端的配置后,接下来我们在OpenClaw中进行相应的设置(默认已装过钉钉插件)。 # 安装钉钉渠道插件 openclaw plugins install @dingtalk-real-ai/dingtalk-connector # 重启 gateway openclaw gateway restart 2.1 添加 Agent

By Ne0inhk
3DMAX VR渲染器局部渲染设置教程

3DMAX VR渲染器局部渲染设置教程

VR 渲染器局部渲染设置 VR 渲染器的局部渲染功能灵活适配多种场景(尤其全景图),操作步骤如下: 1. 调出渲染设置面板:在 3DMAX 软件中,直接按下快捷键「F10」,快速打开渲染设置窗口(也可通过顶部菜单栏「渲染」→「渲染设置」手动调出)。 2. 确认渲染器类型:在渲染设置面板中,切换到「指定渲染器」选项卡,确保当前选定的渲染器为「V-Ray 渲染器」(若未选中,点击下拉菜单切换即可)。 1. 打开 VR 帧缓冲器:切换到「V-Ray」选项卡,找到「帧缓冲器」设置项,勾选「启用内置帧缓冲器」(部分版本默认开启),点击右侧「显示 VFB」按钮,调出 VR 帧缓冲窗口。 1.

By Ne0inhk