Python 打包 exe, 除了pyInstaller还有Nuitka的新选择

简介

Nuitka是一个用Python写的Python编译器,兼容Python 2.6, 2.7, 3.3, 3.4, 3.5, 3.6, 3.7, 3.8,及3.9等,能将Python应用打包成可执行程序或扩展模块。(Nuitka官网:http://nuitka.net/ , 源码:https://github.com/Nuitka/Nuitka)。与PyInstaller等打包工具相比,Nuitka打包出的可执行程序运行速度更快,且能够支持Numpy、Pandas等Python库。

当前最新版本 Nuitka 1.9.7. Stable releases

FastAPI 是一个用于构建 API 的现代、快速(高性能)的异步 web 框架,使用 Python 3.6+ 并基于标准的 Python 类型提示。

(FastAPI官网:https://fastapi.tiangolo.com/,源码:https://github.com/tiangolo/fastapi)。FastAPI依赖于 Starlette(负责Web部分) 和 Pydantic(负责数据部分) 拥有极高的性能。

FastAPI推荐使用ASGI 服务器来运行服务,例如Uvicorn。

使用Nuitka将最简单的FastAPI应用打包成exe。 以打包main.py为例,用Nuitka打包后生成main.exe文件及其他dll等文件,在Windows下直接双击main.exe,启动FastAPI服务。

FastAPI应用

我们使用FastAPI官网上给的例子main.py作为要打包的应用。最后三行是在官网main.py的基础上增加的,我们将Uvicorn也在Python代码中直接调用,这样打包后就可以直接双击可执行文件启动FastAPI服务。

main.py内容如下:

from typing import Optional

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: Optional[str] = None):

return {"item_id": item_id, "q": q}

if __name__=='__main__':

import uvicorn

uvicorn.run(app, host="0.0.0.0", port=8000)

Nuitka打包命令

在main.py所在目录中打开命令行窗口,执行如下Nuitka打包命令:

python -m nuitka --standalone --mingw64 --show-memory --show-progress --nofollow-imports --include-package=uvicorn --include-package=click --include-package=h11 --include-package=starlette --include-package=fastapi --output-dir=o main.py

等待几分钟,即可打包完成。打包后会生成o/main.dist 目录,双击此目录下的main.exe即可启动FastAPI服务。服务启动后,在浏览器访问http://localhost:8000/,可查看到响应字符串

{“Hello”:”World”}

Related Posts

Linux 下 发生 e:无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系 的处理

完美解决 debian ubuntu deepin e:无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系 的处理

强力推荐一个国产AI编程辅助工具,用起来丝滑水润

代号:Fitten Code 你的专业 AI 代码助手

Linux Ubuntu/Deepin 等基于debian的os,解决sign_and_send_pubkey: signing failed: agent refused operation问题

sign_and_send_pubkey: signing failed: agent refused operation

MySQL下,实现每个id或字段,查询限定其记录行数

[亲测]github国内无法访问的解决办法

英特尔核显及锐炬® Xe显卡开启CUDA加速深度学习方法

国外开发者推出了一款名为 ZLUDA 的工具,可以为英…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注