【FASTAPI+UNICORN】带着依赖包整体打包部署到无依赖库环境

打包

安装最新版PyInstaller

pip3install--upgrade pyinstaller

修改 main.py 适配打包路径

打包后程序的运行目录会变化(PyInstaller 会创建临时目录_MEIPASS),必须修改main.py中所有硬编码路径,确保能找到静态文件、配置文件等资源。

# -------------------------- PyInstaller 路径适配核心函数 --------------------------defget_resource_path(relative_path):""" 获取打包后资源的真实路径(适配PyInstaller) - 开发环境:返回项目根目录相对路径 - 打包后:返回PyInstaller临时目录(_MEIPASS)中的路径 """ifhasattr(sys,'_MEIPASS'):# 打包后运行模式base_path=Path(sys._MEIPASS)else:# 开发环境运行模式base_path=Path(os.path.abspath("."))returnstr(base_path/relative_path)

创建定制化 Spec 文件

  1. 生成基础 Spec 文件:

    pyinstaller -F --name video_surveillance main.py

    执行后会生成video_surveillance.spec文件。

  2. 替换为定制化 Spec 文件

  3. 将生成的video_surveillance.spec内容替换为以下完整配置

    upx github下载 或者官网

    # -*- mode: python ; coding: utf-8 -*-importosimportsys from pathlibimportPath# -------------------------- 基础配置 --------------------------# 获取当前Spec文件所在目录#current_dir = Path(__file__).parent# -------------------------- 修复__file__未定义问题 --------------------------# 兼容PyInstaller执行Spec文件时的上下文,获取当前Spec文件所在目录def get_spec_dir():if'__file__'inglobals():returnPath(__file__).parent else:# 备用方案:从命令行参数中提取Spec文件路径forarginsys.argv:ifarg.endswith('.spec')and os.path.exists(arg):returnPath(arg).parent# 最终备用:当前工作目录returnPath(os.getcwd())# 获取当前Spec文件所在目录(修复核心)current_dir=get_spec_dir()# 定义需要打包的资源(格式:(源路径, 目标路径))# 目标路径是打包后程序内部的相对路径,需和main.py中的get_resource_path对应# -------------------------- 资源列表(关键) --------------------------# 1. 静态文件:打包整个static目录(包含所有子目录和文件)static_dir=current_dir /"static"# 2. 配置文件:打包config目录config_dir=current_dir /"config"# 最终打包资源列表datas=[(str(static_dir),"static"),# 静态文件目录(完整打包)(str(config_dir),"config"),# 配置文件目录]# -------------------------- 隐藏依赖(解决动态导入问题) --------------------------hidden_imports=[# Uvicorn/FastAPI核心依赖"uvicorn.lifespan","uvicorn.lifespan.on","uvicorn.protocols.websockets.auto","uvicorn.protocols.http.auto","uvicorn.protocols.http.h11_impl","uvicorn.protocols.websockets.websockets_impl",# WebSocket依赖"websockets",# FastAPI依赖"fastapi.routing","fastapi.dependencies","fastapi.staticfiles","fastapi.responses",# 其他依赖"python_multipart","pydantic","starlette","starlette.websockets","starlette.responses",# 通用ARM64必需依赖"h11","typing_extensions",]# -------------------------- 打包配置 --------------------------block_cipher=None a=Analysis(['main.py'],# 主程序入口pathex=[str(current_dir)],# 项目根目录binaries=[],# 二进制文件(自动识别)datas=datas,# 静态资源hiddenimports=hidden_imports,# 隐藏依赖hookspath=[],hooksconfig={},runtime_hooks=[],excludes=['tkinter','matplotlib','numpy','pandas'],# 排除无用依赖减小体积win_no_prefer_redirects=False,win_private_assemblies=False,cipher=block_cipher,noarchive=False,)pyz=PYZ(a.pure, a.zipped_data,cipher=block_cipher)# -------------------------- 可执行文件配置 --------------------------use_upx=Falseifsys.platform=="win32"and sys.maxsize>2**32:# 仅Windows x64启用UPXuse_upx=True exe=EXE(pyz, a.scripts, a.binaries, a.zipfiles, a.datas,[],name='video_surveillance',# 可执行文件名称debug=False,# 关闭调试模式 仅关闭 PyInstaller 底层的调试日志,不影响代码中的任何打印 / 日志:bootloader_ignore_signals=False,strip=False,upx=use_upx,# 压缩可执行文件(需安装UPX,可选)能 有极轻微的启动延迟(毫秒级),运行中无任何性能损失:upx_exclude=[],runtime_tmpdir=None,console=True,# 保留控制台窗口(方便查看日志)disable_windowed_traceback=False,argv_emulation=False,target_arch=None,codesign_identity=None,entitlements_file=None,)# Windows额外配置(可选)ifsys.platform=="win32":exe=EXE(pyz, a.scripts, a.binaries, a.zipfiles, a.datas,[],name='video_surveillance',debug=False,bootloader_ignore_signals=False,strip=False,upx=use_upx,upx_exclude=[],runtime_tmpdir=None,console=True,# 如需隐藏控制台,改为 windowed=Truedisable_windowed_traceback=False,argv_emulation=False,target_arch=None,codesign_identity=None,entitlements_file=None,)
  4. 执行打包

    pyinstaller video_surveillance.spec
  5. 重新打包

    # 先清理旧的打包产物(可选,避免缓存问题)rm-rf build dist __pycache__# 重新执行打包pyinstaller video_surveillance.spec

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1134192.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

论文破局新势力:书匠策AI如何重新定义课程论文写作

手握鼠标,面对空白的文档界面,时钟滴答声中,课程论文截稿日步步紧逼——这是无数大学生共同的学习焦虑场景。在深夜的图书馆里,一位大三学生正面临着这样的困境:资料堆积如山却无从梳理,论点模糊不清难以聚…

云端炼丹新时代:用Llama Factory轻松管理你的模型实验

云端炼丹新时代:用Llama Factory轻松管理你的模型实验 作为一名AI研究员,你是否经常遇到这样的困扰:同时进行多个方向的探索,实验记录混乱不堪,环境难以复现?今天我要分享的Llama Factory工具,…

Node.js设计模式第三版:构建可扩展企业级应用的完整指南

Node.js设计模式第三版:构建可扩展企业级应用的完整指南 【免费下载链接】Node.js-Design-Patterns-Third-Edition Node.js Design Patterns Third Edition, published by Packt 项目地址: https://gitcode.com/gh_mirrors/no/Node.js-Design-Patterns-Third-Edit…

3倍效率革命:Qwen3智能模型如何重塑企业级AI应用

3倍效率革命:Qwen3智能模型如何重塑企业级AI应用 【免费下载链接】Qwen3-235B-A22B-Instruct-2507-FP8 项目地址: https://ai.gitcode.com/hf_mirrors/Qwen/Qwen3-235B-A22B-Instruct-2507-FP8 还在为传统大模型的高成本、低效率而烦恼吗?当企业…

小白也能懂的Docker卸载图解教程

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 制作一个交互式Docker卸载学习应用,包含:1. 可视化操作指引 2. 每个步骤的详细解说 3. 常见问题即时解答 4. 模拟练习环境 5. 安全检测功能。采用Web技术实…

AI帮你解决WECHATAPPEX内存过高问题

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 开发一个AI辅助工具,用于分析微信小程序WECHATAPPEX的内存占用情况。工具应能自动扫描代码,识别内存泄漏和资源占用高的模块,并提供优化建议。功…

Sambert-Hifigan压力测试:单机支持多少并发语音请求?

Sambert-Hifigan压力测试:单机支持多少并发语音请求? 引言:中文多情感语音合成的工程挑战 随着智能客服、有声阅读、虚拟主播等应用场景的普及,高质量中文语音合成(TTS)服务的需求日益增长。在众多开源方案…

市场营销洞察:问卷调查手写答案OCR统计分析

市场营销洞察:问卷调查手写答案OCR统计分析 📊 从手写反馈中挖掘用户声音:OCR技术的实战应用 在市场营销调研中,问卷调查依然是获取用户真实反馈的重要手段。尤其在线下场景——如展会、门店体验、社区调研等——大量采用纸质问…

无需GPU也可高效推理:CPU优化型TTS模型推荐

无需GPU也可高效推理:CPU优化型TTS模型推荐 📌 背景与痛点:中文多情感语音合成的现实挑战 在智能客服、有声阅读、虚拟主播等应用场景中,高质量中文语音合成(Text-to-Speech, TTS) 已成为不可或缺的技术能力…

Llama Factory快速入门:学生党的AI实验指南

Llama Factory快速入门:学生党的AI实验指南 作为一名计算机专业的学生,寒假期间想学习大模型微调却苦于学校GPU资源紧张?别担心,今天我将分享如何通过Llama Factory这个轻量级工具,在有限资源下快速上手大模型微调实验…

CRNN模型更新日志:最新优化点与性能提升

CRNN模型更新日志:最新优化点与性能提升 📖 项目简介 在OCR(光学字符识别)领域,准确率、鲁棒性与部署成本是衡量一个系统是否具备工业落地能力的核心指标。传统的轻量级OCR方案往往在复杂背景或低质量图像上表现不佳&a…

终极指南:3个技巧快速掌握Blender Gaussian渲染插件 [特殊字符]

终极指南:3个技巧快速掌握Blender Gaussian渲染插件 🎨 【免费下载链接】3dgs-render-blender-addon 3DGS Render by KIRI Engine 项目地址: https://gitcode.com/gh_mirrors/3d/3dgs-render-blender-addon 还在为Gaussian Splatting技术难以集成…

基于YOLOv10的石油泄漏检测系统(YOLOv10深度学习+YOLO数据集+UI界面+模型)

一、项目介绍 项目背景: 石油泄漏是环境监测和工业安全中的重要问题,可能对生态系统、人类健康和经济造成严重影响。传统的石油泄漏检测方法通常依赖于人工巡检或传感器监测,效率较低且难以覆盖大面积区域。基于深度学习的目标检测技术能够自动、高效地…

服装厂废料(边角料)YOLO格式分类检测数据集

摘要:本研究采用的服装厂废料(边角料)分类检测数据集由研究团队自主构建,具备完整的数据采集与标注流程,并具有自主知识产权。数据集面向车间废料分拣与智能回收应用,涵盖棉布、牛仔布、针织布、皮革、涤纶…

VOSviewer Online:智能网络可视化平台的创新实践

VOSviewer Online:智能网络可视化平台的创新实践 【免费下载链接】VOSviewer-Online VOSviewer Online is a tool for network visualization. It is a web-based version of VOSviewer, a popular tool for constructing and visualizing bibliometric networks. …

Spring AI文档解析终极指南:从基础应用到企业级架构设计

Spring AI文档解析终极指南:从基础应用到企业级架构设计 【免费下载链接】spring-ai 项目地址: https://gitcode.com/gh_mirrors/sp/spring-ai 在当今AI驱动的业务环境中,企业面临着海量文档数据的处理挑战。Spring AI文档处理功能提供了统一的多…

HyperLPR3终极使用指南:5分钟构建高性能车牌识别系统

HyperLPR3终极使用指南:5分钟构建高性能车牌识别系统 【免费下载链接】HyperLPR 基于深度学习高性能中文车牌识别 High Performance Chinese License Plate Recognition Framework. 项目地址: https://gitcode.com/gh_mirrors/hy/HyperLPR HyperLPR3是一个基…

Webots机器人仿真工具终极指南:快速掌握专业级仿真技术

Webots机器人仿真工具终极指南:快速掌握专业级仿真技术 【免费下载链接】webots Webots Robot Simulator 项目地址: https://gitcode.com/gh_mirrors/web/webots Webots是一款功能强大的开源机器人仿真平台,为机器人学习、自动驾驶研究和人工智能…

ESP-IDF v5.4.1终极安装指南:从零到精通完整解决方案

ESP-IDF v5.4.1终极安装指南:从零到精通完整解决方案 【免费下载链接】esp-idf Espressif IoT Development Framework. Official development framework for Espressif SoCs. 项目地址: https://gitcode.com/GitHub_Trending/es/esp-idf 还在为ESP-IDF v5.4.…

Meteor Client 终极指南:快速掌握Minecraft实用模组开发

Meteor Client 终极指南:快速掌握Minecraft实用模组开发 【免费下载链接】meteor-client Based Minecraft utility mod. 项目地址: https://gitcode.com/gh_mirrors/me/meteor-client Meteor Client 是一个基于 Fabric 框架的 Minecraft 实用模组&#xff0c…