我是基于 deepseek v3 的 AI 助手
本文将介绍如何将Python文件打包为Windows系统下的可执行文件(exe),以解决Windows用户需要手动安装Python解释器的问题。文章主要介绍了两种常用的打包工具:**PyInstaller** 和 **Nuitka**。 ### PyInstaller PyInstaller 是最常见的Python打包工具,使用简单。首先,通过 `pip install pyinstaller` 安装PyInstaller。然后,进入项目目录,使用 `pyinstaller -c main.py` 命令进行打包。打包完成后,生成的exe文件会出现在 `dist` 文件夹中。文章还介绍了如何将文件打包为单个exe文件(使用 `-F` 参数),以及如何使用UPX压缩工具来减小文件体积。 ### Nuitka Nuitka 是另一种打包工具,它通过将Python代码转换为C++代码再进行编译,从而提升执行速度和反编译难度。安装Nuitka后,还需安装MinGW编译器(winlibs),并配置环境变量。使用 `nuitka --mingw64 --standalone --show-progress --show-memory --output-dir=out main.py` 命令进行编译。Nuitka还支持单文件打包和压缩(使用 `--onefile` 参数),并可以通过 `zstandard` 库进一步压缩文件体积。 本文详细介绍了两种工具的使用方法及其优缺点,适合需要在Windows环境下分发Python程序的开发者。通过本文,读者可以轻松掌握如何将Python代码打包为高效、安全的可执行文件。
# 引言
python 的编写十分简单,而且 linux 内置 python 解释器,无需额外安装
但 windows 系统需要手动安装 python 解释器,一般来说会提高用户上手难度
本文会介绍两种 python 文件打包为 exe 的方式
# pyinstaller
# 基础操作
pyinstaller 是最常见的 python 文件打包器,也是最易于使用的
先使用 pip 安装:
pip install pyinstaller |
然后 cd 到你的 python 项目目录下,本次使用作者的网络工具箱测试:
工具箱包含了 requests、os、socket 等库,大约 300 行左右
假设这个文件为 main.py , 下面进行打包:
pyinstaller -c main.py |
随后开始漫长的打包,等到出现:
XXXXX INFO: Building COLLECT COLLECT-00.toc completed successfully. |
打包就完成了,可以前往 dist 文件夹下查看 main.exe
# 进阶玩法
# 打包成单个 exe
刚刚打包出来的文件是一个文件夹,还需要二次压缩,可以变更一下指令:
pyinstaller -F -c main.py |
这样打包出来的就是一个 exe 文件了,体积会大一点
# upx 压缩
前往 upx 官网 下载 upx, 将 upx.exe 放在项目目录下
然后执行 pyinstaller -F -c main.py 即可
upx 压缩后占用空间会小很多,但执行速度会慢一点
如果使用 numpy 等底层为 C 的第三方库,请不要使用 upx
# nuitka
pyinstaller 打包十分简便,但也存在以下问题:
- python 本身执行速度就很慢
- 执行速度较慢,比 python 还慢
- 反编译非常容易一条龙 pyinstaller 反编译产业链了属于是
而本次的 nuitka 便可以解决上述的问题,它的会先将 python 文件转成 C++ 代码,随后进行编译
这就让 nuitka 编译出的文件具有 C++ 的速度和反反编译能力 \
# 安装
先安装 nuitka:
pip install nuitka |
然后安装 winlibs
注意事项:
- i686=32 位,x86_64=64 位
- 选择 7z 结尾的文件
- 如果太慢了,可以使用 moeyy 的 github 加速 进行加速
然后将这个文件夹放在任意位置,自行添加 path 到 mingw64\bin 目录
输入 gcc --version , 如果有正常输出,就是成功了
# 使用
打开你的项目文件,运行下列命令:
nuitka --mingw64 --standalone --show-progress --show-memory --output-dir=out main.py |
选项的用途:
| 选项 | 用途 |
|---|---|
| --mingw64 | 指定 mingw64 编译器编译,默认为 msvc |
| --standalone | 指定独立环境运行,不然无法独立运行 |
| --show-progress | 显示编译进度 |
| --show-memory | 显示占用内存 |
| --output-dir | 指定输出目录 |
随后,你的终端会和这个一样:

在这里会弹出来一个选择,问你需不需要 ccache 进行加速,如果你的网络环境良好 (github 下载 2MB/S 以上) 可以输入 yes, 反之选 no
如果不是 ccache 可以参考第一步重新下载 winlibs
选择过后:

还会弹出一个选项,应该是 DLL 分析的,选 YES
随后等一段时间,编译就完成了,可以到 out/main.dist 下找到 EXE 文件
# 单文件打包与压缩
nuitka 支持使用 zstd 算法进行压缩,可以通过 pip 安装
pip install zstandard |
随后更改命令行:
nuitka --mingw64 --standalone --show-progress --show-memory --output-dir=out --onefile main.py |
可以加入 --lto=yes 来启用 LTO 优化
随后在执行时会输出:
Nuitka-Scons:INFO: Onefile C compiler: gcc (gcc). | |
Nuitka-Scons:INFO: Onefile linking program (no progress information available). | |
Nuitka-Onefile:INFO: Using compression for onefile payload. | |
Nuitka-Onefile:INFO: Onefile payload compression ratio (30.72%) size 24183275 to 7429408. |
这代表单文件打包和文件压缩已经完成,文件会输出在 out 目录下
