默认只绑定127.0.0.1且防火墙拦截,导致局域网无法访问;需用python -m http.server 8000 -b 0.0.0.0并放行防火墙端口。

直接用 python -m http.server 就能启动,不需要写代码、不装库、不配环境,5秒内可用。
为什么默认命令在局域网里打不开
常见现象是:本地 http://127.0.0.1:8000 能访问,但手机或另一台电脑输 http://192.168.x.x:8000 显示“连接被拒绝”或空白页。
- 根本原因是 Python 默认只绑定
127.0.0.1(本机回环),不监听局域网网卡 - Windows/macOS/Linux 防火墙默认会拦截外来连接,尤其对非标准端口(如 8000、8080)
- 没确认本机局域网 IP,误用了公网 IP 或错误网段地址
解决只需两步:python -m http.server 8000 -b 0.0.0.0 启动,再放行防火墙端口。
指定共享目录的三种可靠方式
很多人以为必须先进入目标文件夹才能共享——其实有更灵活、更安全的做法:
立即学习“Python免费学习笔记(深入)”;
-
cd /path/to/share && python -m http.server 8000:最常用,但容易误共享父目录 -
python -m http.server 8000 --directory /path/to/share:Python 3.7+ 支持,明确指定根目录,推荐 - 用自定义脚本 +
os.chdir()切换后再启动:适合封装成工具,避免 cd 命令污染 shell 环境
注意:--directory 参数在旧版 Python(如 3.6 及以下)不可用,会报错 unrecognized arguments: --directory。
端口被占用或需要 HTTPS 怎么办
8000 端口常被其他服务(如 Docker、VS Code Server)占用;而 HTTP 明文传输敏感文件也不够安全:
- 换端口很简单:
python -m http.server 8888,只要在 1024–65535 范围内且未被占用即可 - 查端口占用(Windows):
netstat -ano | findstr :8000;macOS/Linux:lsof -i :8000 - HTTPS 需要证书,
http.server模块本身不支持;必须用ssl模块包装 handler,或改用Flask/FastAPI等框架 - 临时 HTTPS 推荐组合:
python -m http.server+ngrok http 8000,获得带 TLS 的公网 URL
生成二维码让手机扫码直连
手动输 IP 和端口太麻烦,尤其对非技术人员。一行命令就能生成可扫码的访问码:
- 先获取本机局域网 IP:
ipconfig(Win)或ifconfig en0 | grep "inet "(macOS)或hostname -I(Linux) - 拼接 URL 并生成二维码:
echo -n "http://$(hostname -I | awk '{print $1}'):8000" | qrencode -t ANSI - 没装
qrencode?Mac 用brew install qrencode,Ubuntu/Debian:sudo apt install qrencode
真正容易被忽略的是:hostname -I 在多网卡机器上可能返回多个 IP,必须用 awk '{print $1}' 取第一个,否则二维码内容错乱。


















