用 Nuitka + MSYS2 打包你的 Python 项目(小白版·虚拟环境篇)
真正工作中,你的项目都会放在虚拟环境(venv)里,这篇指南就从这里开始。
1. 为什么需要用虚拟环境打包?
你在开发时肯定已经用上了 venv 来隔离项目依赖,打包时也要在同一个虚拟环境里操作,这样才能保证:
- Nuitka 能准确找到你项目用到的所有第三方库
- 打包出的 exe 和你调试时的运行效果完全一致
- 不会把你电脑上的其他无关库也打进去,导致体积臃肿或版本冲突
所以,正确的打包姿势是:在项目目录下激活 venv → 安装依赖 → 启动 Nuitka 打包。
2. 第一步:安装 MSYS2 和编译器
MSYS2 提供轻量的 Linux 模拟环境,里面自带我们需要的 C 编译器。
2.1 下载安装 MSYS2
- 打开官网:https://www.msys2.org/
- 下载安装包(
msys2-x86_64-xxxxxxxx.exe) - 一路下一步,安装到默认路径
C:\msys64(强烈建议不要改)
2.2 启动正确的终端
从开始菜单找到并点击 MSYS2 MINGW64(紫色图标)。你将看到一个黑底白字的命令行窗口。
2.3 安装编译器和 Python
依次执行下面两行命令(每输入一行按一次回车,等它跑完):
pacman -S mingw-w64-x86_64-gcc
pacman -S mingw-w64-x86_64-python
如果询问是否继续,输入 y 并回车。
2.4 安装 Nuitka
pip install nuitka
至此,所有工具已就绪。之后想升级 Nuitka,只需运行 pip install --upgrade nuitka。
3. 第二步:从虚拟环境打包你的项目
假设你有一个项目文件夹 D:\projects\myapp,里面已经有了一个虚拟环境 venv(如果没有,马上创建也无妨)。
3.1 切换到项目目录
在 MSYS2 的窗口里,路径要用 Unix 格式(斜杠)书写。比如:
cd /d/projects/myapp
提示:
/d就代表 Windows 的D:\,/c代表C:\,以此类推。
3.2 激活虚拟环境(关键步骤!)
在 MSYS2 中激活 Windows 的 venv,直接执行:
source venv/Scripts/activate
执行后,命令提示符前面会出现 (venv) 字样,表示激活成功。
如果提示权限问题,可以先运行
chmod +x venv/Scripts/activate,再重新激活。
3.3 安装项目依赖(如果还没装)
确保你的虚拟环境里已经装好了所有依赖,最稳妥的做法是根据 requirements.txt 安装:
pip install -r requirements.txt
如果你的项目使用的是 pyproject.toml,也可以用 pip install -e .。
3.4 执行打包命令
一切就绪后,在激活的 venv 里运行:
python -m nuitka --mingw64 --standalone --show-progress myapp.py
--mingw64:使用我们刚装的 MinGW 编译器--standalone:把所有依赖复制到一个独立文件夹--show-progress:显示编译进度(看着不慌)myapp.py:请换成你自己的主入口脚本名
耐心等待几分钟,完成后你会看到一个新文件夹 myapp.dist,里面就有 myapp.exe。
双击即可运行!
3.5 分发给别人
将整个 myapp.dist 文件夹压缩,发给朋友的 Windows 电脑,他们解压后直接双击里面的 exe 就能用,完全不需要安装 Python。
4. 常用参数速查(按需选用)
| 参数 | 作用 | 推荐度 |
|---|---|---|
--standalone |
生成包含所有依赖的独立文件夹 | 强烈推荐 |
--onefile |
打包成单个 exe 文件 | 不推荐(启动慢,易误报) |
--windows-disable-console |
隐藏黑窗口(适合 PyQt、Tkinter 等界面程序) | GUI 应用必加 |
--enable-plugin=pyqt5 或 pyqt6 |
告诉 Nuitka 你用了什么 GUI 库 | 使用对应库时必加 |
--show-progress |
显示编译进度 | 新手推荐 |
--include-package=你的包名 |
手动包含某些未被自动侦测的包 | 调试时使用 |
举个实际例子——打包一个基于 PyQt6 的图形界面程序,不要黑窗口:
python -m nuitka --mingw64 --standalone --windows-disable-console --enable-plugin=pyqt6 main_window.py
5. 常见问题速救
❓ 运行 exe 时提示“找不到 xxx.dll”
原因:某些系统级动态库未被自动打包。
解决:先升级 Nuitka 到最新版(pip install --upgrade nuitka),重新打包。
如果仍缺少,可在 MSYS2 的 /mingw64/bin 目录下找到对应 DLL,手动复制到 .dist 文件夹里。
❓ 打包时报 SSL 证书错误
现象:[SSL: CERTIFICATE_VERIFY_FAILED]
解决:
- 检查电脑时间是否正确
- 在 MSYS2 终端运行
pacman -Syu更新系统 - 手动从 Nuitka 官网下载缓存文件放入
C:\Users\你的用户名\AppData\Local\Nuitka\
❓ 如何使用其他 Python 版本?
如果你在 MSYS2 中安装了其他 Python 版本,可以在打包时指定解释器路径:
/c/Python311/python -m nuitka --mingw64 --standalone myapp.py
但建议直接使用 MSYS2 自带的 Python,兼容性最好。
6. 总结
完整打包流程就这几步:
- 装工具:MSYS2 → MinGW → Nuitka
- 进项目:
cd /d/你的项目路径 - 激活 venv:
source venv/Scripts/activate - 装依赖:
pip install -r requirements.txt - 打包:
python -m nuitka --mingw64 --standalone 主脚本.py
生成的 主脚本.dist 文件夹就是可以分发的软件成品。
现在,打开你的 MSYS2,去打包你自己的项目吧 🚀**
更多推荐


所有评论(0)