• 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
    
    • 1

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

    conda create -n EXE python=3.7
    conda activate EXE
    pip install nuitka
    
    • 1
    • 2
    • 3

    输入

    nuitka3 --version
    或
    python -m nuitka --version
    
    • 1
    • 2
    • 3

    可以查看其版本号,笔者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()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    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 指定输出
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

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

    ./main.bin
    ./main.exe
    
    • 1
    • 2

    即可运行!

    2)Win

    # 打包成文件夹
    nuitka --standalone --remove-output --mingw64 main.py
    # 打包成单文件
    nuitka3 --standalone --remove-output --mingw64 --onefile main.py
    
    • 1
    • 2
    • 3
    • 4

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

    pip install zstandard
    
    • 1

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

    3)报错解决

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

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

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

    apt install patchelf
    
    • 1

    即可!

    (2)报警告

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

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

    pip install orderedset
    
    • 1

    即可!

    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结尾的叫模块
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
  • 相关阅读:
    机器学习算法(7)—— 朴素贝叶斯算法
    cmake vs openmp
    【云计算 | Openstack】KVM虚机通过dhcp自动获取地址
    k8s ingress 代理 mysql 3306端口
    Inception-v4 和 Inception-ResNet架构
    Maven
    ChatGPT 宕机?OpenAI 将中断归咎于 DDoS 攻击
    SOLR分组聚合的相关技巧
    信息系统项目管理师0067:数据建模(5信息系统工程—5.2数据工程—5.2.1数据建模)
    LQ0152 杨辉三角形【模拟】
  • 原文地址:https://blog.csdn.net/Acegem/article/details/127824944