PyInstaller打包Kivy应用exe,跨设备运行提示路径/权限访问错误求助
本地使用PyInstaller打包Kivy应用为单文件exe后可正常运行,但转移至其他Windows设备时弹出错误:
Windows cannot access the specified device, path or file. You may not have the appropriate permission to access the item.
环境配置:
PyInstaller = 6.1.0 Python = 3.11
打包流程:
pyinstaller --onefile --noconsole --uac-admin --name=PrinterManager --icon=logo.png main.py > build.log 2>&1 python edit_specs.py pyinstaller PrinterManager.spec > exe.log 2>&1
此前用相同流程打包正常,当前生成的exe体积从之前的145MB降至87MB(应用本身有改动)。已尝试以下操作但无效:
- 添加
--add-binary 'c:/python311/python311.dll;.'参数 - 移除
--uac-admin参数 - 移除
--icon=logo.png参数
排查
edit_specs.py的修改内容
手动修改spec文件是最可能的问题点。检查edit_specs.py是否误删了datas/binaries配置,或者修改了pathex、hiddenimports导致依赖缺失。比如Kivy应用通常需要额外导入kivy.deps.sdl2、kivy.deps.glew等依赖,若spec中被移除,会导致目标设备找不到相关动态库。验证单文件解压后的依赖完整性
单文件exe运行时会临时解压到%TEMP%\_MEIxxxxxx目录,本地运行exe后找到该临时目录,对比之前正常版本和当前版本的文件列表,检查是否缺少关键dll、资源文件,重点关注Kivy相关依赖库(如SDL2.dll、glew.dll)和应用自身的配置/资源文件。检查权限与路径硬编码
- 确认应用中是否存在硬编码的本地路径(比如读取固定目录的文件),目标设备无该路径或权限不足会触发错误。
- 尝试将exe放在非系统盘(如D:\)或用户个人目录下运行,排除目标设备系统目录的权限限制。
回退PyInstaller版本或调整打包参数
PyInstaller 6.x对单文件打包的依赖处理有变更,可能与应用改动不兼容。尝试降级到之前正常打包的PyInstaller版本(如5.x系列)测试;同时去掉--onefile参数打包成文件夹形式,若文件夹版本能正常运行,说明单文件打包的解压或依赖收集环节出了问题。启用控制台日志排查
暂时移除--noconsole参数重新打包,在目标设备运行时会弹出控制台,通过实时输出的错误信息直接定位缺失的文件或路径问题。
内容的提问来源于stack exchange,提问作者Tea Tech

