2026/5/21 17:03:56
网站建设
项目流程
服务器主机搭建网站,惠水网站建设,263企业邮箱注册入口,网站建设怎么创业打包
安装最新版PyInstaller
pip3 install --upgrade pyinstaller修改 main.py 适配打包路径
打包后程序的运行目录会变化#xff08;PyInstaller 会创建临时目录 _MEIPASS#xff09;#xff0c;必须修改 main.py 中所有硬编码路径#xff0c;确保能找到静态文件、配置…打包安装最新版PyInstallerpip3install--upgrade pyinstaller修改 main.py 适配打包路径打包后程序的运行目录会变化PyInstaller 会创建临时目录_MEIPASS必须修改main.py中所有硬编码路径确保能找到静态文件、配置文件等资源。# -------------------------- PyInstaller 路径适配核心函数 --------------------------defget_resource_path(relative_path): 获取打包后资源的真实路径适配PyInstaller - 开发环境返回项目根目录相对路径 - 打包后返回PyInstaller临时目录_MEIPASS中的路径 ifhasattr(sys,_MEIPASS):# 打包后运行模式base_pathPath(sys._MEIPASS)else:# 开发环境运行模式base_pathPath(os.path.abspath(.))returnstr(base_path/relative_path)创建定制化 Spec 文件生成基础 Spec 文件pyinstaller -F --name video_surveillance main.py执行后会生成video_surveillance.spec文件。替换为定制化 Spec 文件将生成的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_dirget_spec_dir()# 定义需要打包的资源格式(源路径, 目标路径)# 目标路径是打包后程序内部的相对路径需和main.py中的get_resource_path对应# -------------------------- 资源列表关键 --------------------------# 1. 静态文件打包整个static目录包含所有子目录和文件static_dircurrent_dir /static# 2. 配置文件打包config目录config_dircurrent_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_cipherNone aAnalysis([main.py],# 主程序入口pathex[str(current_dir)],# 项目根目录binaries[],# 二进制文件自动识别datasdatas,# 静态资源hiddenimportshidden_imports,# 隐藏依赖hookspath[],hooksconfig{},runtime_hooks[],excludes[tkinter,matplotlib,numpy,pandas],# 排除无用依赖减小体积win_no_prefer_redirectsFalse,win_private_assembliesFalse,cipherblock_cipher,noarchiveFalse,)pyzPYZ(a.pure, a.zipped_data,cipherblock_cipher)# -------------------------- 可执行文件配置 --------------------------use_upxFalseifsys.platformwin32and sys.maxsize2**32:# 仅Windows x64启用UPXuse_upxTrue exeEXE(pyz, a.scripts, a.binaries, a.zipfiles, a.datas,[],namevideo_surveillance,# 可执行文件名称debugFalse,# 关闭调试模式 仅关闭 PyInstaller 底层的调试日志不影响代码中的任何打印 / 日志bootloader_ignore_signalsFalse,stripFalse,upxuse_upx,# 压缩可执行文件需安装UPX可选能 有极轻微的启动延迟毫秒级运行中无任何性能损失upx_exclude[],runtime_tmpdirNone,consoleTrue,# 保留控制台窗口方便查看日志disable_windowed_tracebackFalse,argv_emulationFalse,target_archNone,codesign_identityNone,entitlements_fileNone,)# Windows额外配置可选ifsys.platformwin32:exeEXE(pyz, a.scripts, a.binaries, a.zipfiles, a.datas,[],namevideo_surveillance,debugFalse,bootloader_ignore_signalsFalse,stripFalse,upxuse_upx,upx_exclude[],runtime_tmpdirNone,consoleTrue,# 如需隐藏控制台改为 windowedTruedisable_windowed_tracebackFalse,argv_emulationFalse,target_archNone,codesign_identityNone,entitlements_fileNone,)执行打包pyinstaller video_surveillance.spec重新打包# 先清理旧的打包产物可选避免缓存问题rm-rf build dist __pycache__# 重新执行打包pyinstaller video_surveillance.spec