Pyinstaller打包EXE后无法打开COM端口的权限异常排查
Pyinstaller打包串口应用后COM端口权限错误的解决方案
问题分析
Python脚本运行时能正常访问串口,但Pyinstaller打包为EXE后触发PermissionError,且Serial实例显示open=True,这是因为打包后的EXE在Windows系统中对串口资源的访问流程与原生Python环境存在差异——初始化阶段的状态标记不代表实际权限校验通过,后续底层调用时才触发权限拦截。
解决方法
- 补全隐藏依赖:pyserial的Windows平台驱动模块
serial.serialwin32可能未被Pyinstaller自动识别,重新打包时添加隐藏导入参数:pyinstaller --hidden-import=serial.serialwin32 your_script_name.py - 手动控制串口打开流程:避免Serial类自动打开端口,改用手动打开的方式规避初始化时的状态误判:
import serial ser = serial.Serial( port='COM15', baudrate=9600, bytesize=8, parity='N', stopbits=1, timeout=5, do_not_open=True # 禁止自动打开 ) try: ser.open() print(f"端口已成功打开: {ser}") # 执行串口读写操作 except serial.SerialException as e: print(f"打开端口失败: {str(e)}") ser.close() - 检查设备权限设置:
- 打开Windows设备管理器,找到对应COM端口(如COM15)
- 右键选择“属性”,切换到“安全”选项卡
- 确保当前登录用户拥有“读取”和“写入”权限,若没有则添加对应权限
- 启用控制台输出:如果之前用
--windowed参数打包导致无控制台输出,改用--console参数重新打包,以便查看完整的错误日志:pyinstaller --console your_script_name.py - 降级pyserial版本:部分新版本pyserial与Pyinstaller存在兼容性问题,尝试回退到稳定版本:
pip uninstall pyserial -y pip install pyserial==3.5
内容的提问来源于stack exchange,提问作者Abhinav Ramesh
相关产品推荐
相关产品推荐

