Python打包exe等高效工具Nuitka

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的安装直接一条命令即可

pip install nuitka

但为了使环境依赖简洁,最好创建虚拟环境

conda create -n EXE python=3.7
conda activate EXE
pip install nuitka

输入

nuitka3 --version
或
python -m nuitka --version

可以查看其版本号,笔者nuitka安装的是1.2版本,所用的环境是Ubuntu 20.04,Python3.7

2. 准备代码

main.py

def say(info):
    return "Say " + info

def main():
    print(say("Hello World"))

if __name__ == "__main__":
    main()

3. 打包

1)Linux

# 打包成文件夹
nuitka3 --standalone --remove-output main.py  # --standalone参数: --standalone 独立环境,这是必须的(否则拷给别人无法使用)
#--remove-output参数:删除临时缓存
# 或 python -m nuitka --standalone --remove-output main.py  (下同)

# 打包成单文件
nuitka3 --standalone --remove-output --onefile main.py  # --onefile 参数: 生成一个打包文件

# 打包成exe
nuitka3 --standalone --remove-output --onefile -o main.exe main.py # -o 指定输出

Linux下打包后生成 main.binmain.exe二进制文件,直接

./main.bin
./main.exe

即可运行!

2)Win

# 打包成文件夹
nuitka --standalone --remove-output --mingw64 main.py
# 打包成单文件
nuitka3 --standalone --remove-output --mingw64 --onefile main.py

另外,安装 zstandard 后再打包可以让打包出来的文件更小:

pip install zstandard

安装后,上面打包命令不变!

3)报错解决

由于是新建的python虚拟环境,打包时候可能会出现缺失依赖包等的报错和警告。
(1)报错

Nuitka-Options:INFO: Used command line options: --standalone --remove-output --onefile main.py

在这里插入图片描述如果是Ubuntu,则直接

apt install patchelf

即可!

(2)报警告

Nuitka:WARNING: Using very slow fallback for ordered sets, please install 'orderedset' PyPI package for best Python
Nuitka:WARNING: compile time performance.

在这里插入图片描述则直接

pip install orderedset

即可!

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结尾的叫模块

猜你喜欢

转载自blog.csdn.net/Acegem/article/details/127824944