之前用pyinstaller打包python程序,听说Nuitka比较快,用它打包PyQt的程序练练手。
Nuitka
问了问chatGPT,总结几点:将python编译成C/C++,提高速率、跨平台、编译后程序直接运行(不需要python解释器)
Nuitka是一个开源的Python编译器,可以将Python代码转换为C++或C代码,从而提高Python程序的执行效率。它支持Python 2.6、2.7和3.x版本,可在Linux、macOS和Windows等操作系统上运行。
与传统的解释型Python不同,使用Nuitka编译后的代码可以直接在目标计算机上运行,不需要安装Python解释器。同时,由于部分代码被转换为C++或C语言,因此可以获得更好的性能表现和更小的内存占用。
除了编译器本身,Nuitka还包含了一些工具和库,例如Nuitka Debugger和Nuitka GUI,以帮助用户更好地管理和调试他们的代码。此外,该项目还拥有一个活跃的社区,提供了详细的文档和示例代码,方便用户学习和使用。
环境配置
使用环境先说一下
window10、python3.6
参考 Python打包exe的王炸-Nuitka - 知乎 (zhihu.com)
1、下载MinGW64 8.1 (用来编译成可执行程序)
2、安装nuitka,pip install nuitka
操练
常用的参数
--mingw64 #默认为已经安装的vs2017去编译,否则就按指定的比如mingw(官方建议)
--standalone 独立环境,这是必须的(否则拷给别人无法使用)
--windows-disable-console 没有CMD控制窗口
--output-dir=out 生成exe到out文件夹下面去
--show-progress 显示编译的进度,很直观
--show-memory 显示内存的占用
--enable-plugin=pyqt5
--plugin-enable=tk-inter 打包tkinter模块的刚需
--plugin-enable=numpy 打包numpy,pandas,matplotlib模块的刚需
--plugin-enable=torch 打包pytorch的刚需
--plugin-enable=tensorflow 打包tensorflow的刚需
--windows-icon-from-ico=你的.ico 软件的图标
--windows-company-name=Windows下软件公司信息
--windows-product-name=Windows下软件名称
--windows-file-version=Windows下软件的信息
--windows-product-version=Windows下软件的产品信息
--windows-file-description=Windows下软件的作用描述
--windows-uac-admin=Windows下用户可以使用管理员权限来安装
--linux-onefile-icon=Linux下的图标位置
--onefile 像pyinstaller一样打包成单个exe文件(2021年我会再出教程来解释)
--include-package=复制比如numpy,PyQt5 这些带文件夹的叫包或者轮子
--include-module=复制比如when.py 这些以.py结尾的叫模块
打包及问题解决
nuitka --standalone --lto=no --report=report.xml --mingw64 --show-progress --show-memory --nofollow-import-to=pymysql,multiprocessing,http,email --enable-plugin=pyqt5 --output-dir=dis --windows-icon-from-ico=logo.ico main.py
报错提示版本太低:
Nuitka-Scons:INFO: Too old gcc 'C:\MinGW\x86_64-8.1.0\mingw64\bin\gcc.exe' ((8, 1, 0) < (11, 2)) ignored!
Nuitka will use gcc from MinGW64 of winlibs to compile on Windows.
WinLibs - GCC+MinGW-w64 compiler for Windows
在这个网址重新下个MinGW,记得解压修复环境变量