下面我将从最简单的方法开始,逐步介绍更高级和更现代的替代方案。

使用 http.server (最简单、最常用)
这是 Python 标准库的一部分,无需安装任何额外的包。
最简单的用法:启动一个静态文件服务器
这个命令会启动一个服务器,监听当前目录,并允许通过浏览器访问该目录下的文件。
步骤:
-
打开你的终端(或命令提示符)。
(图片来源网络,侵删) -
使用
cd命令切换到你想要共享的文件夹。cd /path/to/your/project_folder
-
运行以下 Python 命令:
python -m http.server
- 在 Python 2 中,命令是
python -m SimpleHTTPServer。 - 如果你使用的是 Python 3,并且希望指定端口号(
8080),可以这样做:python -m http.server 8080
- 在 Python 2 中,命令是
-
打开你的网页浏览器,访问
http://localhost:8000(或你指定的端口,如http://localhost:8080),你就能看到当前文件夹的文件列表,并可以点击下载或查看。
自定义一个简单的服务器脚本
如果你想在服务器代码中加入一些简单的逻辑,可以创建一个 Python 脚本。

示例脚本:my_server.py
import http.server
import socketserver
# 设置端口号
PORT = 8000
# 创建一个自定义的请求处理器,继承自 http.server.SimpleHTTPRequestHandler
class MyHTTPRequestHandler(http.server.SimpleHTTPRequestHandler):
# 我们可以重写方法来自定义行为
def do_GET(self):
# 当访问根路径 "/" 时,返回一个简单的 "Hello, World!"
if self.path == '/':
self.send_response(200)
self.send_header('Content-type', 'text/html')
self.end_headers()
self.wfile.write(b"Hello, World! This is a custom server.")
# 否则,按照默认方式处理(比如提供文件)
else:
super().do_GET()
# 使用 with 语句来管理服务器,确保资源被正确释放
with socketserver.TCPServer(("", PORT), MyHTTPRequestHandler) as httpd:
print(f"Server running at http://localhost:{PORT}")
try:
# 让服务器一直运行,直到被键盘中断 (Ctrl+C)
httpd.serve_forever()
except KeyboardInterrupt:
print("\nServer stopped.")
httpd.server_close()
如何运行:
- 将上述代码保存为
my_server.py文件。 - 在终端中运行它:
python my_server.py
- 访问
http://localhost:8000,你会看到 "Hello, World! ...",访问http://localhost:8000/some_file.txt(如果该文件存在),则会下载或显示该文件。
使用 Flask (更现代、更强大)
对于构建真正的 Web 应用程序(不仅仅是提供文件),Flask 是一个更流行、更灵活的微框架,它提供了路由、模板、请求处理等强大的功能。
安装 Flask
你需要安装 Flask:
pip install Flask
创建一个 Flask 应用
示例脚本:app.py
from flask import Flask
# 创建一个 Flask 应用实例
app = Flask(__name__)
# 使用 @app.route 装饰器来定义 URL 路由
# 当访问根路径 "/" 时,hello_world 函数会被调用
@app.route('/')
def hello_world():
return '<h1>Hello, Flask World!</h1><p>This is a web application.</p>'
# 定义一个带有动态参数的路由
@app.route('/user/<username>')
def show_user_profile(username):
# f-string 用于格式化字符串
return f'<h1>Hello, {username}!</h1>'
# 运行这个应用
if __name__ == '__main__':
# debug=True 会在代码修改后自动重启服务器,并在出错时提供详细的调试页面
app.run(debug=True, port=5000)
如何运行:
- 将上述代码保存为
app.py文件。 - 在终端中运行:
python app.py
- 打开浏览器访问:
http://localhost:5000-> 显示 "Hello, Flask World!"http://localhost:5000/user/Alice-> 显示 "Hello, Alice!"
使用 FastAPI (高性能、现代)
FastAPI 是一个用于构建 API 的现代、快速(高性能)的 Web 框架,它基于 Starlette 和 Pydantic,支持异步请求,并且自动生成交互式 API 文档(Swagger UI)。
安装 FastAPI 和 Uvicorn (ASGI 服务器)
pip install "fastapi[all]"
[all] 会自动安装 uvicorn 和一些其他有用的依赖。
创建一个 FastAPI 应用
示例脚本:main.py
from fastapi import FastAPI
# 创建一个 FastAPI 应用实例
app = FastAPI()
# 定义一个路由
@app.get("/")
def read_root():
return {"message": "Hello, FastAPI World!"}
# 定义一个带有路径参数和查询参数的路由
@app.get("/items/{item_id}")
def read_item(item_id: int, q: str | None = None):
# item_id 是路径参数,会被自动转换为 int
# q 是一个可选的查询参数 (e.g., /items/5?q=somequery)
return {"item_id": item_id, "q": q}
如何运行:
-
将上述代码保存为
main.py文件。 -
在终端中运行 Uvicorn 服务器:
uvicorn main:app --reload
main: 是你的 Python 文件名 (main.py)。app: 是 FastAPI 应用实例的变量名 (app = FastAPI())。--reload: 会在代码修改后自动重启服务器。
-
打开浏览器访问:
http://127.0.0.1:8000-> 显示{"message": "Hello, FastAPI World!"}。http://127.0.0.1:8000/items/5?q=somequery-> 显示{"item_id": 5, "q": "somequery"}。
查看自动生成的 API 文档
FastAPI 最大的优点之一是自动生成交互式文档,访问以下地址:
- Swagger UI:
http://127.0.0.1:8000/docs - ReDoc:
http://127.0.0.1:8000/redoc
你可以直接在页面上测试你的 API 端点!
总结与选择
| 特性 | http.server |
Flask |
FastAPI |
|---|---|---|---|
| 用途 | 快速测试、文件共享、学习 | 小型到中型 Web 应用、网站后端 | 高性能 API、微服务、现代应用 |
| 易用性 | 极简单,一行命令即可 | 简单,学习曲线平缓 | 简单,但概念更现代(如异步、类型提示) |
| 功能 | 非常基础,仅提供静态文件 | 强大,路由、模板、会话等 | 非常强大,异步、数据验证、自动文档 |
| 性能 | 低(单线程,同步) | 中等(WSGI,同步) | 高(ASGI,支持异步) |
| 依赖 | Python 内置,无需安装 | 需要安装 | 需要安装 |
如何选择?
- 只想快速分享一个文件夹? -> 使用
python -m http.server,这是最快、最直接的方法。 - 想构建一个有页面、有交互的传统网站? -> 使用
Flask,它生态系统成熟,易于上手。 - 想构建高性能的 API,或者你的项目需要处理大量并发请求? -> 使用
FastAPI,它是目前 Python Web 开发的热门选择,性能卓越且功能强大。
