Python 打包成 exe 的 4 种方法:Runcell、PyInstaller、Nuitka 与 cx_Freeze
更新于

想把 Python 打包成 exe,先试试 Runcell Python 转 EXE 工具 (opens in a new tab)。 添加 .py 文件、项目文件夹或 ZIP 压缩包,选择启动应用的那个脚本,检查依赖,然后点击 Build Windows EXE。下载生成的文件,就能分享给没有安装 Python 的 Windows 用户。
EXE 会把你的程序连同它需要的运行时和文件一起打包,而把 script.py 改名成 script.exe 做不到这一点。本文先介绍 Runcell 的用法,解释浏览器是怎么生成二进制文件的,再给出三种本地打包工具的命令。Runcell 是 Kanaries 自家的产品,这也是我们推荐的浏览器打包流程。
- Python 打包成 exe 的 4 种方法:Runcell、PyInstaller、Nuitka 与 cx_Freeze
- pandas 3.1 升级指南:inplace 弃用警告、df.select() 与 read_csv 并行加速
- OpenCode 2.0 升级教程:从 1.x 迁移配置、插件与会话(附回滚方法)
- Python 3.15 安装与升级指南:用 uv 安装、延迟导入提速、数据科学库兼容性实测
- Claude Code Mods 教程:从零写出第一个 Mod、测试与安装,附 15 个社区案例
- Pi Coding Agent 1.0 使用教程:安装、接入模型(含 Ollama 本地模型)并跑通第一个任务
- Claude Code 现在会读 AGENTS.md:配置方法、四种加载模式,以及如何与 Codex、OpenCode、Cursor 共用一份文件
- GPT Image 2.5 使用指南:Flare 与 Sunburst 怎么选、API 调用与价格
- DeepSeek Harness 安装教程:一条命令装好 DSH 并跑通第一个任务
- Runcell Science:面向科研的开源 Claude Science 替代方案
- Mac 怎么不休眠:合盖继续运行 Codex、Claude Code 和本地 AI Agent
- OpenClaw vs ZeroClaw vs Pi Agent vs Nanobot:2026 年该选哪个 AI Agent 技术栈?
- Claude Code 能分析 Jupyter Notebook 吗?Data Science 场景下它到底做了什么
- Claude Code Routines 是什么?AI Agent 定时任务与自动触发指南
- Claude Code Desktop 绕过权限:如何开启 Bypass permissions
- 如何用 Google 的 A2A 协议构建两个 Python Agent:一步步教程
- 2025 年 Python 增长最快的 10 个数据可视化库
选择一种 Python 转 EXE 的方法
| 方法 | 适合场景 | 在哪里构建 |
|---|---|---|
| Runcell (opens in a new tab)(我们的首选) | 你有一个控制台(命令行)脚本或项目,想在不安装打包工具的前提下得到 Windows x64 EXE | 在浏览器中,在你自己的设备上 |
| PyInstaller | 你想用一条 Python 命令生成一个文件夹或单个可执行文件,或者要打包 GUI 应用(Tkinter、PySide/PyQt) | 构建 Windows 版本需要 Windows 上的 Python 环境 |
| Nuitka | 你想编译 Python 代码,并愿意配置原生编译器工具链 | Windows 上的 Python 环境,外加受支持的 C 编译器 |
| cx_Freeze | 你想分发一个应用文件夹,并维护它的构建配置 | 构建 Windows 版本需要 Windows 上的 Python 环境 |
下文的命令都在 Windows PowerShell 中运行。只有本地方法需要你自己安装和配置打包工具。
方法 1:用 Runcell 把 Python 转成 EXE
先拿一个小而可复现的脚本练手
把下面的示例保存为 receipt.py。它会打印一张收据、计算总价,最后等待你按回车,这样双击打开的控制台窗口就不会一闪而过。它没有第三方依赖,也不需要额外文件。
items = {"Notebook": 19.50, "Cable": 8.25, "Stand": 12.25}
print("Receipt")
for name, price in items.items():
print(f"{name}: ${price:.2f}")
print(f"Total: ${sum(items.values()):.2f}")
input("Press Enter to close...")如果你已经装了 Python,打包前先运行一次源码,确认没有问题:
python receipt.py输出的总价应该是 Total: $40.00。按回车结束程序。
添加项目并构建
- 打开 Runcell Python 转 EXE 工具 (opens in a new tab),找到页面上的转换器。
- 选择你的
receipt.py文件。如果要打包现有的控制台应用,就改为选择它的项目目录或 ZIP 压缩包,并把它用到的模块和资源文件一并包含进去。 - 把
receipt.py设为入口脚本。在较大的项目里,入口脚本就是你平时用来启动应用的那个脚本,比如main.py。 - 检查工具识别出的导入、依赖和包含的文件。收据示例不需要额外的包。打包你自己的应用时,要确认所需的资源文件和包版本与你准备分发的项目一致。Runcell 的运行时是 Python 3.14,所以每个包都需要有能在 Windows 和 Python 3.14 上使用的 wheel(
cp314、abi3或纯 Python wheel)。 - 点击
Build Windows EXE,然后下载生成的可执行文件。在 Windows 上打开它,确认收据输出正确后再分享出去。
在我们的浏览器测试中,Runcell 成功生成并下载了 receipt.exe。它的文件头显示这是一个 Windows x64 可执行文件。我们没有在 Windows 上运行这个 EXE。
对于包含多个文件的项目,要保持目录结构不变。比如应用会从 templates/invoice.html 加载模板,那么这个文件就必须放在应用期望的路径下,一起打包进去。
浏览器是怎么生成 Windows EXE 的
Runcell 自研的打包引擎会把预编译好的 Windows 启动器、Python 运行时、你的项目文件和依赖组合在一起,在你的设备上组装成一个可下载的 .exe。Windows 相关组件都已经提前编译好,所以浏览器不需要在本地运行 Windows 编译器,也能构建出最终的二进制文件。
整个流程分为两个独立的阶段:
Your Python project + dependencies
+
Python runtime + precompiled Windows launcher
|
v
Runcell assembles the EXE in your browser
|
v
Download the file, then run it on Windows生成文件和运行文件是两回事:浏览器负责组装可执行文件,Windows 负责运行最终的应用。Runcell 的原理说明 (opens in a new tab)介绍了这条打包路径。
哪些内容留在你的设备上
Runcell 在你的浏览器里构建 EXE。如果你的项目导入了某个内置 Windows 运行时没有包含的模块,转换器会在构建前提示你;这时可以删掉这个导入,或者改用下文介绍的本地打包工具。
构建过程中,你的源代码和密钥都留在自己的设备上。不过最终生成的 EXE 会包含你的代码,所以不要把不愿意公开的密钥打包进去。
方法 2:用 PyInstaller 在本地打包
PyInstaller (opens in a new tab) 会把你的脚本、它导入的模块和 Python 运行时收集到一起,生成一个可分发的应用。要生成 Windows EXE,就得在 Windows 上运行 PyInstaller,因为它只为当前所在的操作系统构建程序。
在 receipt.py 所在的文件夹中打开 PowerShell。创建一个虚拟环境,把 PyInstaller 安装进去。如果 Python 是从 python.org 安装的,即使 python 不在 PATH 中,py 启动器也能用;直接调用虚拟环境里的 Python,还能省掉激活环境这一步:
py -m venv .venv
.\.venv\Scripts\python.exe -m pip install pyinstaller
.\.venv\Scripts\python.exe -m PyInstaller --onefile receipt.py生成的文件是 dist\receipt.exe。在 PowerShell 中运行它,查看输出:
.\dist\receipt.exe打包你自己的项目时,先把项目依赖安装到同一个环境里再构建。如果项目有 requirements.txt,运行 .\.venv\Scripts\python.exe -m pip install -r requirements.txt。
-m PyInstaller 这种调用方式区分大小写,写法见官方安装指南 (opens in a new tab)。它能确保打包工具和你的依赖位于同一个 Python 环境中。
选择控制台模式、GUI 模式还是文件夹构建
receipt.py 用到了 print() 和 input(),所以要保持控制台模式。如果是所有交互都在自己窗口里完成的图形界面应用,可以用 --windowed 隐藏控制台窗口。想先在文件夹里检查应用和配套文件,就从 --onedir 开始;需要单个文件方便下载时,再改用 --onefile。详见 PyInstaller 选项参考 (opens in a new tab)。
如果要包含一个 assets 目录,需要显式添加:
.\.venv\Scripts\python.exe -m PyInstaller --onefile --add-data "assets:assets" receipt.py这个例子假设你已经创建了 assets 文件夹。对于打包进去的只读文件,按照 PyInstaller 运行时说明 (opens in a new tab)中的做法,相对于 __file__ 来解析路径。我们的 Python pathlib 指南讲解了相关的路径操作。
方法 3:用 Nuitka 编译并打包
Nuitka (opens in a new tab) 会编译 Python 代码,并能生成可分发的应用。如果你想掌控基于编译器的构建过程,就选它。你需要一个受支持的 C 编译器;在 Windows 上,官方手册列出的选项之一是 Visual Studio 2022 或更高版本。手册还提到,不加实验性参数的话,MinGW64 无法用于 Python 3.13 及更新版本,所以在当前的 Python 版本上,建议直接安装 Visual Studio Build Tools。
在同样的虚拟环境中安装 Nuitka,并使用它的单文件模式:
py -m venv .venv
.\.venv\Scripts\python.exe -m pip install nuitka
.\.venv\Scripts\python.exe -m nuitka --mode=onefile receipt.py在 Windows 上,预期会得到 receipt.exe。如果你更想要一个分发文件夹,就用 --mode=standalone。一定要显式指定其中一种模式:Nuitka 默认的 accelerated 模式并不是用来把应用分发到没装 Python 的电脑上的。编译器的配置方法和特定包的选项,请参照官方手册。
方法 4:用 cx_Freeze 生成应用文件夹
cx_Freeze (opens in a new tab) 通常会生成一个目录,里面包含可执行文件和它依赖的库。如果你想维护一套配置好的应用构建流程,并分发整个文件夹,就选它。
在同样的虚拟环境中安装这个包,然后运行它的命令行构建工具:
py -m venv .venv
.\.venv\Scripts\python.exe -m pip install cx-Freeze
.\.venv\Scripts\cxfreeze.exe --script receipt.py --target-dir dist以上命令依据的是当前版本的 cxfreeze 命令参考 (opens in a new tab)。分发时要提供完整的 dist 文件夹(包括里面的库),不要只复制 EXE。如果想让项目配置可以重复使用,cx_Freeze 也支持 pyproject.toml 和 Python setup 脚本。
分享之前先检查结果
在一台和接收者环境相近的 Windows 电脑上运行应用。以本文的示例来说,要检查各项价格、$40.00 的总价以及按回车的提示。在一台没有单独安装 Python 的电脑上测试,可以确认运行时和依赖都已经打包进去。
对于较大的应用,要实际操作一遍接收者真正会用到的功能,比如选择输入文件、保存报告。如果控制台窗口一打开就立即关闭,就从 PowerShell 启动 EXE,查看错误信息。如果缺少图片或模板,既要检查打包进去的文件,也要检查加载它们时用的路径。动态导入的模块可能需要通过本地打包工具的选项显式包含进去。
无论用哪种工具,未签名的 EXE 在第一次打开时都可能触发 Microsoft Defender SmartScreen 警告。接收者需要先点击 More info,再点击 Run anyway(中文版 Windows 中显示为“更多信息”和“仍要运行”)。
常见问题
不安装打包工具,怎么把 .py 文件转换成 .exe?
使用 Runcell Python 转 EXE 工具 (opens in a new tab)。选择你的 Python 文件、文件夹或 ZIP 压缩包,指定入口脚本,检查依赖,然后在浏览器中构建 Windows EXE。
浏览器真的能生成 Windows 可执行文件吗?
可以。Runcell 在浏览器中把预编译的 Windows 组件、Python 运行时和你的应用组装成一个 EXE。你下载这个文件,再到 Windows 上运行。浏览器生成二进制文件时,并不需要运行这个 Windows 应用。
运行 EXE 的人需要安装 Python 吗?
只要你分发应用时附带了它的运行时和所需依赖,对方就不需要单独安装 Python。Runcell 的打包流程会包含运行时。如果你用本地工具生成的是文件夹,就要分享完整的输出文件夹。
用 PyInstaller 打包成单个 EXE 的命令是什么?
在已经安装好 PyInstaller 和项目依赖的 Windows 环境中运行 python -m PyInstaller --onefile receipt.py。示例的输出文件是 dist\receipt.exe。
资料来源与测试说明
Runcell 的使用流程和打包机制依据其公开产品说明 (opens in a new tab),核对日期为 2026 年 11 月 4 日。本地构建命令依据各方法中链接的官方文档。我们在 macOS 上运行了收据示例的源码,在线上的 Runcell 转换器中选择了它,生成并下载了 receipt.exe,并检查了它的 Windows x64 PE 文件头。我们还在 macOS 上用 PyInstaller 6.22.3(--onefile)和 cx_Freeze 8.7.4 构建了收据脚本,以验证这些命令,并对照 Nuitka 的帮助输出核对了它的模式选项。本文没有在 Windows 上运行任何 EXE。