flask启动报错“address already in use”是端口冲突所致,因5000端口被其他进程占用;可通过lsof或netstat查pid,taskkill杀进程;建议改用空闲端口如5001或关闭热重载避免复用。

Flask启动报错 Address already in use
这是 Flask 开发中最常见的端口冲突问题:你执行 flask run 或 app.run() 时,系统提示端口(默认 5000)已被占用,进程直接退出。根本原因不是 Flask 崩了,而是它试图绑定的地址+端口正被另一个进程霸占着。
查哪个进程在用 5000 端口(Linux/macOS/WSL)
终端里跑这条命令就能定位到 PID 和程序名:
lsof -i :5000
如果没装 lsof(比如某些最小化 Linux 发行版),改用:
netstat -tulpn | grep :5000
常见结果有两类:
- 你自己上次没关干净的
flask run进程(python或python3) - 其他服务,比如另一个 Flask 项目、VS Code 的 Python 调试器、甚至某个前端代理(如
webpack-dev-server配错了端口)
Windows 下怎么杀掉占用 5000 的进程
先查 PID:
netstat -ano | findstr :5000
输出最后一列就是 PID。再用它干掉:
taskkill /PID <code>12345</code> /F
注意:taskkill 必须带 /F 强制终止,否则可能拒绝访问;如果提示“拒绝访问”,说明是系统级进程或权限不足,试试以管理员身份运行命令行。
避免下次再撞上——改端口 or 自动释放
临时解决是杀进程,长期更稳的做法是让 Flask 启动时避开冲突:
- 启动时指定空闲端口:
flask run --port 5001 - 代码里改:
app.run(port=5001)(仅开发环境,别放生产) - 加
--reload参数时,Flask 会尝试复用旧进程,反而容易卡住;干脆关掉热重载:flask run --no-reload - IDE(如 PyCharm)里运行 Flask,记得检查「Run Configuration」是否勾选了「Single instance only」——没勾的话,点两次运行就会起两个实例
端口冲突本身不危险,但新手常误以为是代码出错,反复改路由或配置,其实问题压根不在 Flask 应用逻辑里。真正要盯住的,是本地开发环境里那些“静默驻留”的 Python 进程。










