症状
Flask 启动时立即失败并报 OSError: [Errno 98] Address already in use,Windows 上是等价消息。堆栈指向 socket 绑定调用而非业务逻辑。在 macOS 上默认端口 5000 常被 AirPlay Receiver 占用,因此即使看似没有其他进程也会报错。
诊断
用 lsof -i :5000 或 Windows 的 netstat -ano | findstr :5000 找到占用端口的 PID,结束残留进程,再用 –port 5001 启动以确认是端口冲突而非代码问题。
lsof -i :5000
根因
套接字已被其他进程绑定,新服务器无法绑定。应用代码通常没问题,问题在于重复或残留的进程,或端口被系统保留。
修复
停止占用端口的进程或在空闲端口运行服务器;macOS 上关闭 AirPlay Receiver 或换端口。确保每个端口只运行一个服务实例。
验证
修复后服务器会打印 running-on 地址且不再报 OSError,在浏览器加载应用确认可响应。
常见陷阱
直接换端口只能掩盖冲突;若错误反复出现,应确认是否有重复启动的实例或系统保留端口。