使用nuitka打包python为exe并发布
简介
Nuitka is the optimizing Python compiler written in Python that creates executables that run without an need for a separate installer. Data files can both be included or put alongside.
Nuitka is fully compatible with Python 3 (3.4 — 3.11) and Python 2 (2.6, 2.7), works on Windows, macOS, Linux and more, basically where Python works for you already.
- 使用此库可达到以下目的:
- 隐藏源码。这里的pyinstaller是通过设置key来对源码进行加密的;而nuitka则是将python源码转成C++(这里得到的是二进制的pyd文件,防止了反编译),然后再编译成可执行文件。
- 方便移植:跨平台,可多平台使用:win、mac、linux等
优势
- 小体积
- 启动快速
- 不易逆向解析
缺点
- 打包较为缓慢
- 仅提供命令行式打包(无配置文件)
安装
- nuitka主要通过pip命令安装,具体如下:
1
2
3pip install Nuitka
pip install ordered-set
pip install zstandard - 如果上述命令执行较慢,可使用镜像源安装:
1
2pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple Nuitka
打包发布
- 命令举例如下:
1
2
3
4
5
6
7# --follow-import-to为需要打包的模块名
# --output-dir=out 为打包完成后输出的exe地址
# --show-progress 显示打包进度
# ./run/run_py.py 程序入口
# --standalone 跨平台和不同计算机运行exe必选option
# --mingw64 使用mingw64 打包
python -m nuitka --mingw64 --standalone --follow-import-to=utils,api,log,run --output-dir=out --show-progress ./run/run_py.py
常见command option 解析
1 | –mingw64 #默认为已经安装的vs2017去编译,否则就按指定的比如mingw(官方建议) |
mingw64下载缓慢
- 在以下目录放置手动下载的mingw安装包
1
https://www.mingw-w64.org/downloads/
文件名如下
1
winlibs-x86_64-posix-seh-gcc-13.2.0-llvm-16.0.6-mingw-w64msvcrt-11.0.1-r1.zip
- 需要手动移动至以下目录(无法自定义目录,只能使用默认路径)
1
C:\Users\Administrator\AppData\Local\Nuitka\Nuitka\Cache\downloads
放置完成后,重新运行上述命令即可打包成功!
当控制台询问是否安装gcc时, 输入yes进行安装
打包完成后,效果如下:
- 如题
pyinstaller 与 nukia打包结果对比
大小对比
- 如图
启动速度对比
- nuitkia比pyinstaller打包exe启动同一程序快66%
特殊库引入
- 举例:pyqt5
1
2
3
4
5
6# 启用pyqt5插件
--plugin-enable=pyqt5
# 禁用控制台窗口
--windows-disable-console
# 启用图标
--windows-icon-from-ico=favicon.ico - 例如执行以下命令:
1
nuitka --mingw64 --standalone --show-progress --show-memory --output-dir=out --plugin-enable=pyqt5 --windows-disable-console --windows-icon-from-ico=favicon.ico xxx.py