python打包exe三种方式
python打包exe执行文件
1.pyinstaller 打包
-
这里以打包一个简单fastapi服务为例子
-
环境
python 3.6.7
pyInstaller 4.7
FastApi 0.70.0
unicorn 0.15.0
- extra-hook/hoks-unicorn.py
from PyInstaller.utils.hooks import get_package_paths
datas = [(get_package_paths('uvicorn')[1], 'uvicorn')]
- 执行命令
pyinstaller -y --clean --additional-hooks-dir extra-hooks foo.py
- foo.spec添加
hiddenimports=['uvicorn.lifespan.off','uvicorn.lifespan.on','uvicorn.lifespan',
'uvicorn.protocols.websockets.auto','uvicorn.protocols.websockets.wsproto_impl',
'uvicorn.protocols.websockets_impl','uvicorn.protocols.http.auto',
'uvicorn.protocols.http.h11_impl','uvicorn.protocols.http.httptools_impl',
'uvicorn.protocols.websockets','uvicorn.protocols.http','uvicorn.protocols',
'uvicorn.loops.auto','uvicorn.loops.asyncio','uvicorn.loops.uvloop','uvicorn.loops',
'uvicorn.logging']
- 执行
pyinstaller foo.spec
参照:
2.cx_Freeze
- 这里以打包一个简单fastapi服务为例子
- 环境
python 3.6.8
FastApi 0.70.0
unicorn 0.15.0
cx-Freeze 6.8.3
- 构建setup.py
import sys
from cx_Freeze import setup, Executable
sys.path.append(r'../')
os.environ['TYPE'] = "red"
build_exe_options = {'packages': ['uvicorn', 'fastapi'],# 指定包
'excludes': [],
'include_files': []# 包含的静态文件
}
base = None
if sys.platform == 'win32':
base = 'Win32GUI'
setup(name = 'runFastApi',
version = '1.0.0',
description = '测试fastapi部署服务',
options = {'build_exe': build_exe_options},
executables = [Executable('foo.py', base=base)])
- foo.py
from fastapi import FastAPI
import uvicorn
app = FastAPI(
title="SERVER",
description="",
version="1.0.0",
)
@app.get("/")
async def read():
return {"Hello": "World"}
if __name__ == '__main__':
uvicorn.run(
app=app,
host="0.0.0.0",
port=9192
)
3.pyarmor
- 这里以打包一个简单fastapi服务为例子
- 环境
python 3.6.8
FastApi 0.70.0
unicorn 0.15.0
pyarmor 7.0.3
- 打包
pyarmor pack foo.py
- 可以通过可视化界面进行混淆打包
pip install pyarmor-webui
# 启动
pyarmor-webui -p 9088
分类:
python基础知识
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库