Nuitka 打包exe文件详解

Nuitka 打包详解

Current Python Version: 3.10.11

准备

安装Nuitka

pip install nuitka

参数

--standalone 生成一个标准的可执行文件,但是注意程序依赖的dll动态库,也会生成,如果程序依赖的库文件在系统中找不到,执行时会报错。如果采用此方案打包,可以最后使用upx进行压缩

--onefile 打包成一个可执行文件,这个文件中包含Python解析器以及依赖的其他库,是一个绿色的可执行程序,该文件不依赖任何外部程序
--include-data-file 包含额外的静态资源文件
--include-module 包含模块
-o 设置输出目录

优化和调试

--deep 进行深入的优化
--no-cache 禁用编译缓存
--debug 生成调试信息
--nofollow-imports 排除哪些不需要的模块,减少打包大小
--icon 自定义图标

提高打包速度

--remove-output 删除临时构建的文件,能够节省磁盘空间,加快构建速度
--lto 启用连接时优化,进一步优化二进制文件体积和性能
--jobs=4 提高并发处理速度
--nofollow-imports 避免Nuitka 跟踪不必要的模块依赖导入,从而减少编译时间,尤其当你的项目依赖大量模块时

  • 分阶段打包
    • 先将核心模块编译成.pyd文件,然后将这些.pyd文件与其他代码一起打包,这样提高打包成功率
  • 避免打包单文件
    • 打包单文件会增加,编译时间
  • 使用批处理 脚本自动化执行

打包fastapi应用

# main.py
from fastapi import FastAPI

app = FastAPI()

@app.get("/")
def read_root():
    return {"Hello": "World"}

@app.get("/items/{item_id}")
def read_item(item_id: int, q: str = None):
    return {"item_id": item_id, "q": q}

# main.py
if __name__ == "__main__":
    import uvicorn
    uvicorn.run("main:app", host="0.0.0.0", port=8000)

打包命令

python -m nuitka --nofollow-imports --standalone --include-module=uvicorn --jobs=4 --include-module=fastapi --include-module=main --output-dir=./output --onefile  main.py

注意:一定要包含--include-module=main要不然白打包了

脚本打包

#!/bin/bash

MODULES="click pydantic fastapi uvicorn redis sqlalchemy pymysql openpyxl websockets"
modules_array=($MODULES)

params = ""
for module in "${modules_array[@]}";do
    params+=" --include-module=${module}"
done



function clear_build() {
    echo "正在清除打包程序..."
    rm -rf output/
    echo "清除完成"
}

function build_exe(){
    echo "正在执行exe打包程序..."
    python -m nuitka --nofollow-imports --standalone ${params} --jobs=4 --include-module=main --output-dir=./output --onefile  main.py
    echo "exe文件打包完成"
}

case "$1" in
    clear)
        clear_build
        ;;
    build)
        # build_py_package
        build_exe
        ;;
    *)
        echo "用法: $0 {clear|build}"
        echo 
        echo "clear: 清除打包程序"
        echo "build: 执行exe打包程序"
        exit 1
        ;;
esac

exit 0

效果

参考文档

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值