尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

AIGlasses OS Pro 安装包制作指南:封装模型与依赖为可分发应用

AIGlasses OS Pro 安装包制作指南:封装模型与依赖为可分发应用 AIGlasses OS Pro 安装包制作指南封装模型与依赖为可分发应用你是不是也遇到过这样的烦恼自己好不容易在本地电脑上把AIGlasses OS Pro环境搭好了模型也跑得挺顺畅想分享给同事或者部署到其他机器上结果发现对方电脑上啥环境都没有光是装Python、配CUDA、下依赖库就得折腾大半天还可能因为版本问题各种报错。今天我就来分享一个一劳永逸的解决办法把整个AIGlasses OS Pro项目连同它的Python环境、模型文件、配置文件一起打包成一个独立的安装包或者绿色版软件。这样一来无论对方是Windows还是Linux系统有没有装Python都能像安装普通软件一样双击安装一键运行。这招特别适合给非技术同事交付AI应用或者做产品演示、客户部署。下面我就手把手带你走一遍完整的封装流程用到的工具都很常见保证你能跟着做出来。1. 准备工作理清打包思路在动手之前我们得先想明白一个完整的AIGlasses OS Pro应用包里应该包含哪些东西。这就像你要出门旅行得先列个清单。核心组成部分你的应用代码这是主体包括所有Python脚本、Web界面文件等。Python解释器一个独立的、纯净的Python环境避免和系统环境冲突。所有依赖库torch,transformers,gradio等等一个都不能少。模型文件这是最占空间的部分需要确保模型权重文件被打包进去。配置文件比如端口号、模型路径等设置。启动脚本一个简单的.bat(Windows)或.sh(Linux)文件让用户双击就能启动。我们的目标就是把这些东西通过工具“粘”在一起生成一个.exe(Windows)或者可执行文件(Linux)或者更进一步做成一个带有安装向导的安装包。2. 环境整理与项目优化打包之前先给项目“瘦身”和“规整”一下能让打包过程更顺利生成的安装包也更干净。2.1 创建并导出依赖清单首先确保你在一个干净的虚拟环境里开发AIGlasses OS Pro。这能避免把不必要的系统级包打进去。# 假设你的项目目录是 AIGlasses-OS-Pro cd AIGlasses-OS-Pro # 导出当前环境的所有依赖包和版本到 requirements.txt pip freeze requirements.txt打开生成的requirements.txt检查一下。你可能会看到很多间接依赖或者版本号带的本地路径。我们需要一个干净的清单。一个更好的方法是使用pipreqs它只扫描你的项目代码找出实际用到的包。# 安装 pipreqs pip install pipreqs # 扫描当前目录生成 requirements.txt pipreqs . --encodingutf8 --force2.2 处理模型文件模型文件通常很大几个GB。PyInstaller这类工具默认会把所有数据文件都打包进一个巨大的可执行文件里这并不理想。我们更常用的做法是让可执行文件从外部目录读取模型。调整你的代码在你的主程序比如app.py里不要用硬编码的绝对路径来加载模型。改为从相对路径或者通过配置文件指定路径来加载。# 不好的做法 model_path “C:/Users/Name/AIGlasses-OS-Pro/models/my_model” # 推荐的做法 import os base_dir os.path.dirname(__file__) # 获取当前脚本所在目录 model_dir os.path.join(base_dir, “models”, “my_model”) # 或者从 config.ini 文件读取 # model_dir config[‘MODEL’][‘PATH’]这样打包时我们只需要把models文件夹整个复制到最终安装目录下即可。2.3 编写启动入口脚本创建一个非常简单的启动脚本例如run.py它只做一件事导入并启动你的主应用。这能让PyInstaller的入口点更明确。# run.py from your_main_module import main # 替换为你的主函数导入 if __name__ “__main__”: main()3. 使用 PyInstaller 打包核心应用PyInstaller 能将Python程序及其依赖打包成一个独立的可执行文件是制作绿色版软件的首选工具。3.1 安装与基本打包首先在之前整理好的虚拟环境中安装PyInstaller。pip install pyinstaller然后进行第一次基础打包尝试。我们以run.py作为入口。pyinstaller -F -w run.py参数解释-F打包成一个单独的exe文件One-file模式。所有依赖都塞进这一个文件。-w运行时不显示控制台窗口对于有GUI的应用如Gradio。run.py你的入口脚本。执行后会在项目目录下生成dist文件夹里面就有run.exe。但这时候直接运行它十有八九会失败因为模型文件等数据没被打包进去。3.2 处理数据文件和隐藏导入我们需要通过编写一个.spec文件来告诉PyInstaller更多细节。先生成一个模板pyinstaller run.py这会在当前目录生成一个run.spec文件。用文本编辑器打开它进行编辑。关键修改部分# run.spec a Analysis( [‘run.py’], pathex[], binaries[], datas[], # 我们要在这里添加数据文件 hiddenimports[], # 我们要在这里添加隐式导入的模块 hookspath[], hooksconfig{}, runtime_hooks[], excludes[], noarchiveFalse, ) # 1. 添加数据文件模型、配置文件等 # 格式(‘源路径’, ‘在打包文件中的目标文件夹’) a.datas [(‘models’, ‘models’)] # 将本地的models文件夹打包到exe同级的models文件夹 a.datas [(‘config.ini’, ‘.’)] # 将配置文件打包到根目录 a.datas [(‘requirements.txt’, ‘.’)] # 2. 添加隐藏导入PyInstaller有时分析不到的库 # 例如如果你的代码里动态导入了某些库或者用了torch的一些子模块 a.hiddenimports [‘torch’, ‘torchvision’, ‘transformers’, ‘gradio’, ‘PIL’] # 3. 可选如果你用了CUDA可能需要添加DLL文件 # a.binaries [(‘cudnn64_8.dll’, ‘C:\\Path\\To\\cudnn64_8.dll’, ‘BINARY’)] pyz PYZ(a.pure) exe EXE( pyz, a.scripts, a.binaries, a.datas, a.zipfiles, a.pure, name‘run’, # 生成的exe名字 debugFalse, bootloader_ignore_signalsFalse, stripFalse, upxTrue, # 使用UPX压缩可以减小体积 upx_exclude[], runtime_tmpdirNone, consoleFalse, # 是否显示控制台对应 -w 参数 disable_windowed_tracebackFalse, argv_emulationFalse, target_archNone, codesign_identityNone, entitlements_fileNone, icon‘your_icon.ico’, # 可以指定exe的图标 )编辑好.spec文件后使用这个spec文件重新打包pyinstaller run.spec这次生成的dist/run.exe应该就包含了你的模型和数据文件。你可以把整个dist文件夹拷贝到一台没有Python环境的电脑上试试。3.3 解决常见打包问题文件太大使用-F单文件模式虽然方便但每次启动解压慢且文件巨大。可以考虑使用-D目录模式默认生成一个包含exe和一堆依赖库的文件夹然后把models文件夹手动放进去。体积更可控。运行时缺少模块检查hiddenimports把报错缺失的模块名加进去。有时候需要深入分析错误堆栈。路径问题这是最常见的坑。在打包后的环境中sys._MEIPASS指向临时解压目录。你的代码中获取资源路径时需要做兼容处理。import os import sys def get_resource_path(relative_path): “”“获取打包后资源的绝对路径”“” try: # PyInstaller创建的临时文件夹路径 base_path sys._MEIPASS except AttributeError: # 正常开发环境路径 base_path os.path.abspath(“.”) return os.path.join(base_path, relative_path) # 使用方式 model_path get_resource_path(os.path.join(“models”, “my_model”))4. 进阶制作专业安装包以NSIS为例只有一个exe或一个文件夹对普通用户来说还不够“傻瓜”。他们希望有一个安装向导选择安装目录、创建桌面快捷方式、添加到开始菜单。在Windows上NSISNullsoft Scriptable Install System是制作这类安装包的神器。4.1 准备安装文件假设我们通过PyInstaller的-D模式生成了一个包含所有文件的文件夹dist/run。它的结构如下dist/run/ ├── run.exe ├── 各种.dll和.pyd文件 ├── 其他依赖文件夹...我们把之前提到的models文件夹和config.ini也复制到这个dist/run目录下。这个dist/run文件夹就是我们最终要分发给用户的“绿色软件”全集。4.2 编写NSIS脚本NSIS通过一个.nsi脚本文件来控制安装过程。创建一个文本文件保存为setup.nsi。; 定义基本安装信息 !define APP_NAME “AIGlasses OS Pro” !define COMP_NAME “YourCompany” !define APP_VERSION “1.0.0” !define APP_PUBLISHER “Your Name” !define APP_WEB_SITE “http://www.yourwebsite.com” !define INSTALL_DIR “$PROGRAMFILES\${APP_NAME}” ; 默认安装到Program Files ; 引入现代UI界面 !include “MUI2.nsh” ; 设置安装程序属性 Name “${APP_NAME}” OutFile “AIGlasses_OS_Pro_Setup_${APP_VERSION}.exe” ; 生成的安装包名字 InstallDir “${INSTALL_DIR}” InstallDirRegKey HKLM “SOFTWARE\${APP_NAME}” “Install_Dir” RequestExecutionLevel admin ; 可能需要管理员权限写入Program Files ; 设置界面 !insertmacro MUI_PAGE_WELCOME !insertmacro MUI_PAGE_LICENSE “LICENSE.txt” ; 如果有许可协议文件 !insertmacro MUI_PAGE_DIRECTORY ; 选择安装目录 !insertmacro MUI_PAGE_INSTFILES ; 显示安装进度 !insertmacro MUI_PAGE_FINISH ; 安装完成 !insertmacro MUI_UNPAGE_CONFIRM ; 卸载确认 !insertmacro MUI_UNPAGE_INSTFILES ; 卸载进度 !insertmacro MUI_LANGUAGE “English” ; 设置语言 ; 安装章节 Section “MainSection” SEC01 SectionIn RO ; 必须安装 ; 设置输出路径为用户选择的目录 SetOutPath “$INSTDIR” ; 将我们准备好的整个文件夹dist/run下的所有内容打包进来 ; 假设你把 dist/run 下的所有文件和子文件夹都放在了与 setup.nsi 同级的 “Package” 文件夹里 File /r “Package\*.*” ; 写入安装信息到注册表用于卸载和控制面板显示 WriteRegStr HKLM “SOFTWARE\${APP_NAME}” “Install_Dir” “$INSTDIR” WriteRegStr HKLM “SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\${APP_NAME}” “DisplayName” “${APP_NAME}” WriteRegStr HKLM “SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\${APP_NAME}” “UninstallString” ‘”$INSTDIR\uninstall.exe”’ WriteRegStr HKLM “SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\${APP_NAME}” “DisplayVersion” “${APP_VERSION}” WriteRegStr HKLM “SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\${APP_NAME}” “Publisher” “${APP_PUBLISHER}” WriteRegDWORD HKLM “SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\${APP_NAME}” “NoModify” 1 WriteRegDWORD HKLM “SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\${APP_NAME}” “NoRepair” 1 ; 创建卸载程序 WriteUninstaller “$INSTDIR\uninstall.exe” ; 创建快捷方式 CreateDirectory “$SMPROGRAMS\${APP_NAME}” CreateShortCut “$SMPROGRAMS\${APP_NAME}\${APP_NAME}.lnk” “$INSTDIR\run.exe” CreateShortCut “$SMPROGRAMS\${APP_NAME}\Uninstall.lnk” “$INSTDIR\uninstall.exe” CreateShortCut “$DESKTOP\${APP_NAME}.lnk” “$INSTDIR\run.exe” SectionEnd ; 卸载章节 Section “Uninstall” ; 删除安装目录所有文件 RMDir /r “$INSTDIR” ; 删除开始菜单文件夹 RMDir /r “$SMPROGRAMS\${APP_NAME}” ; 删除桌面快捷方式 Delete “$DESKTOP\${APP_NAME}.lnk” ; 删除注册表信息 DeleteRegKey HKLM “SOFTWARE\${APP_NAME}” DeleteRegKey HKLM “SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\${APP_NAME}” SectionEnd4.3 编译生成安装包下载并安装NSIS。按照脚本注释将PyInstaller生成的dist/run目录下的所有内容复制到一个新建的Package文件夹中。将setup.nsi和Package文件夹放在同一目录。右键点击setup.nsi文件选择“Compile NSIS Script”。稍等片刻就会在同一目录下生成一个专业的AIGlasses_OS_Pro_Setup_1.0.0.exe安装程序。现在你就可以把这个单一的.exe文件发给任何Windows用户了。他们双击运行跟着向导点击“下一步”就能完成安装并在桌面和开始菜单找到快捷方式。5. 总结与后续建议走完这一套流程你应该已经得到了一个可以分发的AIGlasses OS Pro安装包。从最初的代码整理到用PyInstaller打包核心应用再到用NSIS封装成专业安装程序每一步都是在降低最终用户的使用门槛。实际做下来我感觉最花时间的往往不是打包命令本身而是解决打包后的各种运行时问题尤其是路径和动态库依赖。对于更复杂的项目可能还需要处理CUDA、cuDNN等GPU环境的封装那通常会选择将驱动层面的东西作为前置条件要求用户安装而只打包Python层面的依赖。给你的建议是第一次打包成功后一定要在一台“纯净”的测试机比如虚拟机上反复安装测试模拟真实用户的环境。记录下所有遇到的问题回头优化你的打包脚本和代码。当你的用户只需要双击就能用上你开发的AI工具时那种成就感绝对值得这番折腾。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。
返回列表