Linux
- Python打包,Nuitka,高效
Python打包exe等高效工具Nuitka - 前言
- 1. 安装
- 2. 准备代码
- 3. 打包
- 1)Linux
- (1)简单打包(适合没有过多依赖的,如一个py脚本)
- (2)专业打包(适合工程项目)
- 2)Win
- 3)打包常见报错解决
- 4)其他打包参数
- 4. 应用
- 1)pyqt5
Python打包,Nuitka,高效
Python打包exe等高效工具Nuitka
前言
Python常用的打包工具有 Nuitka、Pyinstaller、py2exe、Cx_freeze,最火的莫过于Pyinstaller和Nuitka。比较之下,Nuitka更好,速度更快。因为:
nuitka的作用是将python程序转换成C语言的可执行elf文件。这样在运行时就可以享受到C语言处理过程中的优化,提高速度。经测试,Nuitka打包后的exe比Pyinstaller打包后的exe运行速度提升30%。
1. 安装
Nuitka的安装直接一条命令即可
pipinstallnuitka# 笔者当前使用版本 2.5.9 和 2.7.7但为了使环境依赖简洁,最好创建虚拟环境
# python3.7版本conda create-nEXEpython=3.7conda activate EXE pipinstallnuitka或
# python3.12.8高版本,打包报错概率小些conda create-nEXEnuitkapython=3.12.8 conda activate EXEnuitka pipinstallnuitka输入
nuitka3--version或 python-mnuitka--version可以查看其版本号,笔者nuitka安装的是1.2版本,所用的环境是Ubuntu 20.04,Python3.7
2. 准备代码
例如:main.py
defsay(info):return"Say "+infodefmain():print(say("Hello World"))if__name__=="__main__":main()或者其他大的工程项目。
3. 打包
为了避免打包时依赖定位错误,建议使用python -m nuitka ...,不要直接用nuitka命令。
打包常用参数:
--standalone: --standalone 独立环境,这是必须的(否则拷给别人无法使用)。--onefile: 打包成一个可执行二进制文件。有这个参数时可以省略上面的 --standalone 参数。--remove-output:删除临时缓存。-o:输出,打包成的文件名。
1)Linux
(1)简单打包(适合没有过多依赖的,如一个py脚本)
# 1. 打包成文件夹python-mnuitka--standalone--remove-output main.py# 2. 打包成单文件,默认生成二进制文件main.binnuitka3--standalone--remove-output--onefilemain.py# --onefile 参数: 生成一个打包文件nuitka3--standalone--remove-output--onefile-omain main.py# -o 指定输出执行测试:
# 执行打包生成的二进制文件./main.bin ./main(2)专业打包(适合工程项目)
python-m nuitka--onefile--remove-output--static-libpython=no--include-module=main-o main main.py2)Win
# 打包成文件夹nuitka--standalone--remove-output--mingw64main.py# 打包成单文件nuitka3--standalone--remove-output--mingw64--onefilemain.py另外,安装zstandard(一个类似zip、rar的压缩文件的包)后再打包可以让打包出来的文件更小:
pip install zstandard安装后,上面打包命令不变!
3)打包常见报错解决
由于是新建的python虚拟环境,打包时候可能会出现缺失依赖包等的报错和警告。
(1)报错
Nuitka-Options:INFO: Used command line options: --standalone --remove-output --onefile main.py则直接
pipinstallpatchelf或者通过系统安装,比如:如果是Ubuntu,也可直接
aptinstallpatchelf# 卸载# apt remove patchelf即可!
(2)报警告
Nuitka:WARNING: Using very slow fallback for ordered sets, please install 'orderedset' PyPI package for best Python Nuitka:WARNING: compile time performance.则直接
pipinstallorderedset即可!
4)其他打包参数
win:
--mingw64#默认为已经安装的vs2017去编译,否则就按指定的比如mingw(官方建议)--standalone独立环境,这是必须的(否则拷给别人无法使用)--windows-disable-console 没有CMD控制窗口 --output-dir=out 生成exe到out文件夹下面去 --show-progress 显示编译的进度,很直观 --show-memory 显示内存的占用 --include-qt-plugins=sensible,styles 打包后PyQt的样式就不会变了 --plugin-enable=qt-plugins 需要加载的PyQt插件 --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文件 --include-package=复制比如numpy,PyQt5 这些带文件夹的叫包或者轮子 --include-module=复制比如when.py 这些以.py结尾的叫模块4. 应用
1)pyqt5
打包pyqt5 GUI应用
python-mnuitka--standalone--onefile--remove-output --enable-plugin=pyqt5 --include-module=PyQt5 ./你的文件名.py注:使用python -m nuitka命令打包100%安全,比直接用编译后的二进制命令nuitka打包更好!!!