真正工作中,你的项目都会放在虚拟环境(venv)里,这篇指南就从这里开始。


1. 为什么需要用虚拟环境打包?

你在开发时肯定已经用上了 venv 来隔离项目依赖,打包时也要在同一个虚拟环境里操作,这样才能保证:

  • Nuitka 能准确找到你项目用到的所有第三方库
  • 打包出的 exe 和你调试时的运行效果完全一致
  • 不会把你电脑上的其他无关库也打进去,导致体积臃肿或版本冲突

所以,正确的打包姿势是:在项目目录下激活 venv → 安装依赖 → 启动 Nuitka 打包


2. 第一步:安装 MSYS2 和编译器

MSYS2 提供轻量的 Linux 模拟环境,里面自带我们需要的 C 编译器。

2.1 下载安装 MSYS2

  1. 打开官网:https://www.msys2.org/
  2. 下载安装包(msys2-x86_64-xxxxxxxx.exe
  3. 一路下一步,安装到默认路径 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=pyqt5pyqt6 告诉 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]
解决

  1. 检查电脑时间是否正确
  2. 在 MSYS2 终端运行 pacman -Syu 更新系统
  3. 手动从 Nuitka 官网下载缓存文件放入 C:\Users\你的用户名\AppData\Local\Nuitka\

❓ 如何使用其他 Python 版本?

如果你在 MSYS2 中安装了其他 Python 版本,可以在打包时指定解释器路径:

/c/Python311/python -m nuitka --mingw64 --standalone myapp.py

但建议直接使用 MSYS2 自带的 Python,兼容性最好。


6. 总结

完整打包流程就这几步:

  1. 装工具:MSYS2 → MinGW → Nuitka
  2. 进项目cd /d/你的项目路径
  3. 激活 venvsource venv/Scripts/activate
  4. 装依赖pip install -r requirements.txt
  5. 打包python -m nuitka --mingw64 --standalone 主脚本.py

生成的 主脚本.dist 文件夹就是可以分发的软件成品。

现在,打开你的 MSYS2,去打包你自己的项目吧 🚀**

更多推荐