Python 语言系统梳理
Python 是一种解释型、动态类型、面向对象的高级编程语言,由 Guido van Rossum 于 1991 年首次发布。其设计哲学强调代码可读性和简洁的语法。
当前主流版本为 Python 3.x(3.14 于 2025 年发布)。CPython 是官方参考实现,另有 PyPy(JIT)、Jython(JVM)、IronPython(.NET)等替代实现。
1. 概述
Python 语言的定义分为以下几个层面:
| 层面 | 核心内容 |
|---|---|
| 词法/语法 | 缩进定义块、动态类型、表达式/语句、f-string、模式匹配(match) |
| 数据模型 | 一切皆对象(identity + type + value)、标准类型层次、特殊方法(dunder) |
| 执行模型 | 代码块→帧→命名空间、LEGB 作用域规则、名称绑定与解析 |
| 导入系统 | importlib、finder/loader、sys.path、模块缓存 sys.modules |
| 内存管理 | 引用计数 + 分代循环检测 GC、对象分配与释放 |
| 标准库 | 200+ 内置模块,涵盖 OS、网络、文本、数学、并发、序列化等 |
2. 行为图
2.1 用例图 — Python 使用场景
2.2 活动图 — 源码到执行全流程
Python 并非纯粹的"解释型"语言——源码先被编译为字节码(bytecode),再由 Python 虚拟机(PVM)执行。
Demo: 查看字节码
import dis
def add(a, b):
return a + b
dis.dis(add)
# 输出:
# 1 0 RESUME 0
# 2 2 LOAD_FAST 0 (a)
# 4 LOAD_FAST 1 (b)
# 6 BINARY_OP 0 (+)
# 10 RETURN_VALUE
2.3 活动图 — CPython 垃圾回收机制
CPython 使用引用计数(主策略)+ 分代循环检测(辅助策略)。引用计数能立即回收非循环垃圾,循环引用由 gc 模块分三代定期扫描。
2.4 时序图 — import 模块加载流程
当执行 import foo 时,Python 按以下顺序查找并加载模块:sys.modules 缓存 → sys.meta_path finders → sys.path 路径搜索。
Demo: import 内部机制
import sys
import importlib
# 查看已加载模块
print("os" in sys.modules) # False
import os
print("os" in sys.modules) # True
# meta_path 上的 finders
for finder in sys.meta_path:
print(type(finder).__name__)
# BuiltinImporter
# FrozenImporter
# PathFinder
# sys.path 搜索路径
for p in sys.path[:3]:
print(p)
# (当前目录)
# /usr/lib/python312.zip
# /usr/lib/python3.12
2.5 时序图 — 函数调用全流程
从 Python 代码调用一个函数到 C 底层执行,涉及 Code Object、Frame Object、调用栈等多层抽象。
Demo: 函数对象内省
def greet(name):
"""Say hello to someone."""
return f"Hello, {name}!"
# 函数是对象
print(type(greet)) # <class 'function'>
# 函数属性
print(greet.__name__) # greet
print(greet.__doc__) # Say hello to someone.
print(greet.__code__) # <code object greet at ...>
# code 对象内省
co = greet.__code__
print(co.co_varnames) # ('name',)
print(co.co_argcount) # 1
print(co.co_consts) # (None, 'Hello, ', '!')
2.6 状态机图 — Python 对象生命周期
Python 对象的生命周期由引用计数决定。对象从创建到销毁经历以下几个状态转移。
Demo: 引用计数观察
import sys
a = [] # refcount = 1
print(sys.getrefcount(a)) # 2 (参数传递临时+1)
b = a # refcount = 2
c = [a] # refcount = 3
del b # refcount = 2
del c # refcount = 1
del a # refcount = 0 → 对象被回收
2.7 状态机图 — GIL 与线程调度
CPython 默认使用 全局解释器锁(GIL),确保任意时刻只有一个线程执行 Python 字节码。I/O 操作时 GIL 被释放。3.13+ 支持 --disable-gil 自由线程模式。
3. 结构图
3.1 组件图 — CPython 核心架构
CPython 解释器由多个核心子系统构成,涵盖编译前端、运行时核心、内存管理、标准库等。
3.2 包图 — Python 标准库组织
Python 标准库(200+ 模块)按功能域组织。核心内置模块(sys, os, io 等)用 C 编写以保证性能。
3.3 类图 — Python 类型系统层次
Python 中一切皆对象,类型本身也是对象(type 的实例)。类型层次的核心是 object(所有类的基类)和 type(所有元类的基类)。
Demo: 类型关系验证
# 一切皆对象
print(isinstance(42, object)) # True
print(isinstance("hello", object)) # True
print(isinstance(int, object)) # True (类型也是对象)
# type 是自身的实例
print(type(type)) # <class 'type'>
print(isinstance(type, type)) # True
print(isinstance(object, type)) # True
# object 没有基类
print(object.__bases__) # ()
# 多继承 MRO
class A: pass
class B(A): pass
class C(A): pass
class D(B, C): pass
print(D.__mro__)
# (<class 'D'>, <class 'B'>, <class 'C'>, <class 'A'>, <class 'object'>)
3.4 类图 — Python 对象模型核心
Python 对象模型的三个核心概念:对象(Object)、类型(Type)、引用(Reference)。对象的底层结构由 PyObject 和 PyVarObject C 结构体实现。
3.5 部署图 — Python 运行时架构
Python 运行时层次:
- 进程 — 全局资源(内存、文件句柄、信号等)
- Python 全局运行时 — 管理多个解释器实例
- Python 解释器 — 独立的执行环境(各自拥有 sys.modules、GIL 等)
- 线程 — 执行 Python 字节码的线程,拥有独立的线程状态和调用栈
4. 使用手册
4.1 安装
| 平台 | 推荐方式 |
|---|---|
| macOS | brew install python@3.13 或从 python.org 下载 |
| Ubuntu/Debian | sudo apt install python3.13 |
| Windows | python.org 下载安装器,勾选 "Add to PATH" |
| 多版本管理 | pyenv(Unix)或直接从 python.org 下载 |
4.2 基础语法速览
# === 变量与基本类型 ===
x = 42 # int(无限精度)
pi = 3.14 # float
name = "Python" # str(Unicode)
flag = True # bool(int 子类)
nothing = None # NoneType 单例
# === 序列 ===
items = [1, 2, 3] # list(可变)
point = (10, 20) # tuple(不可变)
data = b"hello" # bytes(不可变)
mutable_data = bytearray(b"hi")# bytearray(可变)
# === 集合与映射 ===
unique = {1, 2, 3} # set(可变,元素唯一)
frozen = frozenset([1, 2, 3]) # frozenset(不可变)
d = {"key": "value", "a": 1} # dict(保序,Python 3.7+)
# === 控制流(缩进定义代码块!)===
if x > 0:
print("positive")
elif x < 0:
print("negative")
else:
print("zero")
for item in items: # 遍历序列
print(item)
i = 0
while i < 5: # while 循环
print(i)
i += 1
# 模式匹配(Python 3.10+)
match point:
case (0, 0):
print("origin")
case (x, 0):
print(f"x-axis at {x}")
case (0, y):
print(f"y-axis at {y}")
case (x, y):
print(f"point at {x},{y}")
case _:
print("not a point")
4.3 模块与包
# === 导入模块 ===
import math
print(math.sqrt(16)) # 4.0
from math import sin, cos
from collections import defaultdict, Counter
# 相对导入(包内使用)
# from . import sibling_module
# from ..parent_pkg import module
# === __name__ 检测 ===
if __name__ == "__main__":
print("作为脚本直接运行")
else:
print("作为模块被导入")
__init__.py 的三重职责
目录下放置 __init__.py,该目录才被 import 系统识别为常规包(regular package)。它同时承担三个职责:
| 职责 | 行为 | 说明 |
|---|---|---|
| 包标记 | 使 movement/ 成为可导入的包 | PEP 420 起,无该文件也可作 namespace package,但两者语义不同(见下) |
| 初始化代码 | 首次 import 包时执行一次 | 可写包级初始化逻辑、副作用、版本号等 |
| 门面导出 | 把子模块公开符号重导出到包顶层 | 调用方无需关心符号在包内哪个文件,降低耦合 |
以本项目的 engine/movement/ 为例:符号实际定义在 engine.py 与 trend.py,但通过 __init__.py 聚合后,调用方可以直接从包顶层导入:
# movement/__init__.py —— 包门面
"""趋势识别引擎模块。"""
from .engine import (
MovementParams, MovementSegment, MovementStream,
ReversalParams, scan_key_ks, scan_movements, segments_to_signals,
)
from .trend import TrendGate, TrendParams
# 未定义 __all__,故 import * 会导出上述所有名字
# —— 调用方 ——
from engine.movement import MovementStream, TrendGate # 无需关心内部拆分
# 等价于(但更耦合):
# from engine.movement.engine import MovementStream
# from engine.movement.trend import TrendGate
__init__.py 中定义 __all__ = ["MovementStream", "TrendGate", ...],控制 from pkg import * 的导出范围。此外,从包中 import 子模块(如 import pkg.sub)时,包本身也会被隐式执行一次。
__init__.py 时,多个分布/路径下的同名目录可以合并成同一个逻辑包。它适合大型项目拆分、插件式扩展,但没有初始化代码、也没有门面导出的落点——与常规包是两种不同语义。
与 Java 的对比:为什么 Java 没有 __init__.py
Java 的包机制和 Python 的模块机制是两套不同设计,因此 Java 没有对应物。差异如下:
| 维度 | Python | Java |
|---|---|---|
| 包如何被识别 | 需要 __init__.py(常规包) | 每个 .java 顶部的 package com.foo.bar; 声明 + 目录路径 + classpath,无需标记文件 |
| 初始化语义 | __init__.py 在首次 import 包时运行 | 无“包初始化代码”概念;类初始化由 static {} 静态块按类惰性触发,粒度是 class 不是 package |
| 导出/聚合 | 可在包顶层重导出子模块符号,做门面 | import 永远指向具体类(全限定名),不存在“把子模块符号提升到包级再导出” |
| 可见性模型 | 包边界由 __init__.py + 命名空间承载 | public/private/protected/package-private 编译进 class 文件,包边界由 package 声明决定 |
Java 中最接近的类比:
package-info.java:给整个包挂 Javadoc / 包级注解,但不做初始化、不做导出。module-info.java(JDK 9+,JPMS):模块级(比包更粗)的exports/requires声明,才是 Java 里最像“包级门面”的机制。
__init__.py 同时承担“包标记 + 初始化 + 导出聚合”三职责;Java 把这三件事分别交给了「目录 + package 声明」、「static 块」、「类级 import / 可见性」,所以没有对应文件。
4.4 面向对象
# === 类定义 ===
class Animal:
kingdom = "Animalia" # 类变量
def __init__(self, name, species):
self.name = name # 实例变量
self._species = species # 约定私有(单下划线)
def speak(self):
return "..."
@staticmethod
def info():
return "All animals"
@classmethod
def create_dog(cls, name):
return cls(name, "dog")
# === 继承 ===
class Dog(Animal):
def __init__(self, name, breed):
super().__init__(name, "dog")
self.breed = breed
def speak(self):
return f"{self.name} says woof!"
# === 属性装饰器 ===
class Circle:
def __init__(self, radius):
self._radius = radius
@property
def radius(self):
return self._radius
@radius.setter
def radius(self, value):
if value < 0:
raise ValueError("radius must be >= 0")
self._radius = value
@property
def area(self):
return 3.14159 * self._radius ** 2
# === 数据类 (Python 3.7+) ===
from dataclasses import dataclass
@dataclass
class Point:
x: float
y: float
label: str = ""
p = Point(1.5, 2.5)
print(p) # Point(x=1.5, y=2.5, label='')
4.5 异常处理
# === try/except/finally/else ===
try:
result = 10 / 0
except ZeroDivisionError as e:
print(f"Error: {e}")
except (TypeError, ValueError):
print("Type or value error")
else:
print("No error occurred") # 仅在无异常时执行
finally:
print("Always runs") # 始终执行(清理资源)
# === with 上下文管理器(自动清理)===
with open("file.txt", "r") as f:
content = f.read()
# f.close() 自动调用,即使有异常
# === 自定义异常 ===
class ValidationError(Exception):
def __init__(self, message, field):
super().__init__(message)
self.field = field
raise ValidationError("invalid", field="email")
4.6 异步编程
import asyncio
# === 协程函数 ===
async def fetch_data(url: str) -> str:
print(f"Fetching {url}...")
await asyncio.sleep(1) # 模拟 I/O
return f"Data from {url}"
# === 并发执行 ===
async def main():
tasks = [
fetch_data("api/users"),
fetch_data("api/products"),
fetch_data("api/orders"),
]
results = await asyncio.gather(*tasks)
for r in results:
print(r)
# asyncio.run(main()) # 运行入口
# === 异步生成器 ===
async def async_range(n):
for i in range(n):
await asyncio.sleep(0.1)
yield i
# === 异步上下文管理器 ===
class AsyncLock:
async def __aenter__(self):
print("acquiring lock...")
return self
async def __aexit__(self, *args):
print("releasing lock...")
4.7 pip 与虚拟环境
# === 创建虚拟环境 ===
python -m venv myenv
# 激活(Unix/macOS)
source myenv/bin/activate
# 激活(Windows)
# myenv\Scripts\activate
# === 安装包 ===
pip install requests
pip install pytest==8.0.0
pip install -r requirements.txt
# === 常用命令 ===
pip list # 列出已安装包
pip show requests # 查看包详情
pip freeze > requirements.txt # 导出依赖
pip uninstall requests # 卸载
# 退出虚拟环境
deactivate
4.8 常用标准库速查
| 模块 | 用途 | 示例 |
|---|---|---|
os | 操作系统接口 | os.listdir('.'), os.path.join(a,b) |
sys | 系统参数 | sys.argv, sys.path, sys.exit() |
pathlib | 现代路径操作 | Path("a/b").mkdir(parents=True) |
json | JSON 编解码 | json.dumps(d), json.loads(s) |
re | 正则表达式 | re.match(r'\d+', s) |
datetime | 日期时间 | datetime.now(), timedelta(days=1) |
collections | 高级容器 | Counter, defaultdict, deque |
itertools | 高效迭代器 | chain, groupby, product |
functools | 高阶函数 | lru_cache, reduce, partial |
subprocess | 子进程管理 | subprocess.run(['ls', '-l']) |
threading | 线程并行 | Thread(target=f).start() |
multiprocessing | 进程并行 | Pool().map(f, data) |
asyncio | 异步 I/O | asyncio.run(main()) |
argparse | CLI 参数解析 | argparse.ArgumentParser() |
logging | 日志 | logging.basicConfig(level=INFO) |
unittest | 单元测试 | class TestFoo(unittest.TestCase) |
typing | 类型提示 | List[str], Optional[int], Callable |
dataclasses | 数据类 | @dataclass class Point: x: int |
5. 后端技术栈
以下梳理当前(2025-2026)Python 后端开发的主流技术栈,涵盖 Web 框架、数据库、消息队列、部署运维等全链路。
5.1 分层架构总览
Python 后端技术栈按关注点可划分为以下层次:
| 层次 | 职责 | 主流选择 |
|---|---|---|
| Web 框架 | HTTP 路由、请求处理、中间件 | FastAPI · Django · Flask · Litestar |
| API 协议 | 接口规范、序列化格式 | REST/OpenAPI · GraphQL · gRPC · WebSocket |
| 数据模型 | ORM、数据验证、序列化 | SQLAlchemy · Pydantic · Django ORM · Tortoise ORM |
| 数据库 | 持久化存储、查询 | PostgreSQL · MySQL · MongoDB · Redis |
| 异步任务 | 后台任务、定时任务、消息 | Celery · Dramatiq · RQ · Redis/Kafka |
| 认证/授权 | 身份认证、权限控制 | JWT · OAuth2 · RBAC/ABAC · Keycloak |
| 可观测性 | 日志、指标、追踪、告警 | structlog · Prometheus · Sentry · OpenTelemetry |
| 基础设施 | 部署、编排、CI/CD | Docker · K8s · GitHub Actions · Ansible |
┌─────────────────────────────────────────────────┐ │ API Layer (HTTP / GraphQL / gRPC) │ │ FastAPI · Django · Flask · Litestar │ ├─────────────────────────────────────────────────┤ │ Service / Business Logic Layer │ │ Use Cases · Domain Services │ ├─────────────────────────────────────────────────┤ │ Data Access Layer │ │ SQLAlchemy · Django ORM · Tortoise ORM │ ├─────────────────────────────────────────────────┤ │ Data / Infra Layer │ │ PostgreSQL · Redis · Kafka · S3 · Elasticsearch│ ├─────────────────────────────────────────────────┤ │ Background / Async Layer │ │ Celery · Dramatiq · asyncio · Taskiq │ ├─────────────────────────────────────────────────┤ │ Observability Layer │ │ structlog · Prometheus · Sentry · Jaeger │ └─────────────────────────────────────────────────┘
5.2 Web 框架
| 框架 | 类型 | 异步 | 适用场景 |
|---|---|---|---|
| FastAPI | ASGI 微框架 | 原生 async | API 服务、微服务、AI 推理服务 |
| Django | 全栈框架 | 部分 async (4.1+) | CMS、管理后台、全栈应用 |
| Flask | WSGI 微框架 | Quart 扩展 | 轻量 API、原型、遗留系统 |
| Litestar | ASGI 框架 | 原生 async | API 服务、WebSocket 密集应用 |
| Sanic | ASGI 框架 | 原生 async | 高性能 API、实时服务 |
| Django-Ninja | Django 插件 | 原生 async | Django 项目 API 化 |
| Falcon | WSGI/ASGI | 支持 | 极致性能 API、底层优化 |
FastAPI 核心生态
| 组件 | 推荐库 | 说明 |
|---|---|---|
| 数据验证 | pydantic (v2) | 类型驱动,Rust 核心 |
| ORM | SQLModel / SQLAlchemy | SQLModel 是两者的结合体 |
| 数据库迁移 | alembic | 与 SQLAlchemy 深度集成 |
| 异步任务 | celery / dramatiq / taskiq | Taskiq 原生 asyncio |
| 缓存 | fastapi-cache / redis-py | 支持 Redis、Memcached |
| 认证 | fastapi-users / python-jose | JWT、OAuth2 开箱即用 |
| API 文档 | 内置 /docs 和 /redoc | 自动生成 Swagger / ReDoc |
| 依赖注入 | Depends() (内置) | 类型安全的 DI 系统 |
| 测试 | httpx + pytest | async 测试支持完善 |
Django 核心生态
| 组件 | 推荐库 | 说明 |
|---|---|---|
| REST API | django-rest-framework (DRF) / django-ninja | DRF 成熟稳定;Ninja 类型化、更快 |
| GraphQL | strawberry-django / graphene-django | Strawberry 类型优先 |
| 异步任务 | celery + django-celery-beat | 经典组合 |
| 缓存 | django-cacheops / 内置 cache | ORM 级自动缓存 |
| 认证 | django-allauth | OAuth、社交登录一体化 |
| Admin 增强 | django-unfold | 现代 UI |
| 存储 | django-storages | S3、Azure、GCS |
| 权限 | django-guardian / django-rules | 对象级权限 |
5.3 API 协议与规范
RESTful + OpenAPI 是最主流的接口风格。FastAPI 自动生成 OpenAPI 3.1 JSON Schema,配合 /docs 实现交互式 API 浏览。
| 领域 | 推荐方案 |
|---|---|
| Schema 定义 | Pydantic BaseModel |
| 路由组织 | FastAPI APIRouter |
| 版本管理 | URL 前缀 /v1/ 或 Accept header |
| 错误处理 | 统一 HTTPException + Pydantic 错误模型 |
| 分页 | offset-limit 或 cursor-based |
| 自动测试 | schemathesis 基于 OpenAPI 的 property-based testing |
GraphQL 生态以 Strawberry(code-first,Pydantic 兼容)和 Ariadne(schema-first)为主流。
gRPC(grpcio + protobuf)适合微服务间高性能 RPC 通信。
WebSocket 推荐 FastAPI 原生支持或 Django Channels,轻量场景用 websockets 库。
5.4 ORM 与数据库
| ORM | 类型 | 异步 | 特点 |
|---|---|---|---|
| SQLAlchemy 2.0 | 关系型 ORM + Core | 原生 async | 功能最全,事实标准 |
| Django ORM | 关系型 ORM | 部分 async (4.2+) | Django 内置,开发最快 |
| SQLModel | SQLAlchemy + Pydantic | 原生 async | 类型驱动,FastAPI 绝配 |
| Peewee | 轻量关系型 | 扩展支持 | 简洁 API,小项目友好 |
| Tortoise ORM | 纯异步 ORM | 原生 async | Django 风格,异步优先 |
| Beanie | MongoDB ODM | 原生 async | Pydantic 风格,简洁优雅 |
数据库选型
| 数据库 | 类型 | Python 驱动 | 推荐场景 |
|---|---|---|---|
| PostgreSQL | 关系型 | asyncpg / psycopg (3.x) | 首选:JSONB、全文搜索、扩展丰富 |
| MySQL | 关系型 | aiomysql / pymysql | 兼容现有 MySQL 基础设施 |
| SQLite | 嵌入式 | 内置 sqlite3 / aiosqlite | 开发/测试、单机应用 |
| MongoDB | 文档型 NoSQL | motor (async) / pymongo | 灵活 Schema、日志/事件 |
| Redis | 内存 KV | redis-py (支持 async) | 缓存、Session、队列、计数器 |
| Elasticsearch | 搜索引擎 | elasticsearch-py (async) | 全文搜索、日志分析 |
| DuckDB | OLAP 嵌入式 | duckdb | 分析查询、数据探索 |
缓存层
| 方案 | 说明 |
|---|---|
| Redis | 最通用:缓存 + 队列 + pub/sub + 分布式锁 |
| Memcached | 纯缓存,多线程好,数据结构简单 |
| diskcache | 本地文件缓存,SQLite 后端,无需外部服务 |
| cachetools | 内存缓存装饰器,适合单进程 |
| fastapi-cache | FastAPI 集成,装饰器即用 |
5.5 数据验证与序列化
Pydantic v2 是 Python 数据验证的事实标准,底层用 Rust(pydantic-core)重写,速度比 v1 快 5-50 倍。支持类型注解驱动、JSON Schema 自动生成、ORM 集成(from_attributes = True)、自定义验证(@field_validator)。配合 pydantic-settings 从环境变量/.env 加载配置。
| 序列化格式 | 推荐库 | 场景 |
|---|---|---|
| JSON | orjson (快速) / msgspec (极速) | 通用 API 通信 |
| MessagePack | msgpack | 二进制紧凑传输 |
| Protocol Buffers | protobuf | gRPC 高性能 RPC |
| Avro | fastavro | Kafka 消息序列化 |
| Marshmallow | marshmallow | 传统方案,Flask 生态常用 |
5.6 任务队列与消息队列
| 方案 | 特点 | 适用场景 |
|---|---|---|
| Celery | 最成熟,多 Broker(RabbitMQ/Redis/SQS) | 企业级异步任务,定时任务 |
| Dramatiq | 简洁 API,Actor 模型 | 需要比 Celery 更简单的场景 |
| RQ | Redis 专用,极简部署 | 小型系统、Redis 已有场景 |
| Taskiq | 原生 asyncio,类型提示 | 异步优先项目,FastAPI 搭配 |
| Huey | 轻量,SQLite/Redis 后端 | 小型项目、嵌入式 |
消息队列选型
| 中间件 | 场景 | Python 库 |
|---|---|---|
| Redis Streams | 轻量消息流 | redis-py (内置) |
| RabbitMQ | 企业级消息路由 | pika / aio-pika |
| Apache Kafka | 高吞吐事件流 | confluent-kafka / aiokafka |
| NATS | 轻量高性能 pub/sub | nats-py |
| FastStream | 统一抽象层 | 一键接入 Kafka/RabbitMQ/NATS/Redis |
5.7 认证与授权
JWT 方案(最流行的无状态认证)
| 组件 | 库 | 说明 |
|---|---|---|
| JWT 编解码 | python-jose / PyJWT | HS256/RS256 |
| 密码哈希 | passlib[bcrypt] / bcrypt | bcrypt / argon2 |
| OAuth2 集成 | fastapi-users / httpx-oauth | FastAPI 开箱即用 |
| Django 集成 | django-allauth + djangorestframework-simplejwt | 社交登录 + JWT |
OAuth2 / OpenID Connect
| 方案 | 说明 |
|---|---|
| Authlib | 最完整的 OAuth/OIDC 库,支持客户端和服务端 |
| Keycloak | 独立 IDP,通过 OIDC 集成 |
| django-oauth-toolkit | Django OAuth2 Provider |
权限管理
| 模式 | Python 方案 | 适用 |
|---|---|---|
| RBAC | 自实现 + FastAPI Depends | 企业后台、管理系统 |
| ABAC | pycasbin | 灵活属性级权限 |
| 对象级权限 | django-guardian / django-rules | Django 项目 |
| Casbin | casbin | 跨语言统一策略 |
5.8 可观测性
| 领域 | 推荐方案 | 说明 |
|---|---|---|
| 结构化日志 | structlog | 键值对日志,可渲染 JSON,新项目首选 |
| 简易日志 | loguru | 极简 API,色彩输出,个人项目 |
| 指标收集 | prometheus_client + prometheus-fastapi-instrumentator | Prometheus 指标暴露 |
| 分布式追踪 | opentelemetry-python | OTLP → Jaeger / Zipkin / Tempo |
| 错误追踪 | sentry-sdk | 异常自动上报+上下文 |
| 性能剖析 | py-spy (采样) / scalene (CPU+内存) | 生产环境诊断 |
5.9 测试
| 领域 | 推荐方案 | 说明 |
|---|---|---|
| 测试框架 | pytest | 事实标准,fixture/mark/parametrize 极其强大 |
| 异步测试 | pytest-asyncio | 支持 async test function |
| 覆盖率 | coverage + pytest-cov | 行/分支覆盖报告 |
| Mock HTTP | respx (httpx) / responses (requests) | 模拟外部 API 调用 |
| 属性测试 | hypothesis | 自动生成边界测试数据 |
| API 测试 | schemathesis | 基于 OpenAPI Schema 自动生成测试 |
| 工厂/造数据 | factory_boy / polyfactory | 生成测试 Fixture |
| 假数据 | faker | 姓名、地址、电话等随机生成 |
| E2E/负载 | playwright / locust | 浏览器测试 / 压力测试 |
| 多版本测试 | tox / nox | 多 Python 版本矩阵 |
5.10 DevOps 与部署
容器化
Docker 是 Python 应用部署的标准方式。推荐 python:3.12-slim 基础镜像,多阶段构建减少体积,uv 加速安装。
Web 服务器
| 服务器 | 协议 | 接口 | 场景 |
|---|---|---|---|
| Uvicorn | HTTP/WebSocket | ASGI | 首选 ASGI 服务器;FastAPI 默认 |
| Gunicorn | HTTP | WSGI | Django/Flask 生产;可配 Uvicorn worker |
| Hypercorn | HTTP/2/WebSocket | ASGI/WSGI | 需要 HTTP/2 支持 |
| Granian | HTTP/WebSocket | ASGI/WSGI/RSGI | Rust 实现,性能优秀 |
| Daphne | HTTP/WebSocket | ASGI | Django Channels 默认 |
uvicorn (开发) / gunicorn + uvicorn.workers.UvicornWorker (生产)。Django → gunicorn (WSGI) 或 uvicorn (ASGI)。
CI/CD
| 工具 | 说明 |
|---|---|
| GitHub Actions | 最流行的 CI/CD,免费额度充足 |
| GitLab CI | 自建一体方案 |
| pre-commit | 本地 Git hooks,提交前 lint/format |
| tox / nox | 多版本 Python 测试矩阵 |
典型 CI 流程:lint (ruff) → type check (mypy) → test (pytest) → build image → deploy。
5.11 开发工具链
包/环境管理
| 工具 | 定位 | 特点 |
|---|---|---|
| uv | 极速包管理器 | Rust 实现,pip 替代品;支持 lock;PEP 兼容 |
| Poetry | 依赖+打包+发布 | poetry.lock;PEP 517/518 |
| PDM | PEP 标准优先 | PEP 621 pyproject.toml;无自定义元数据 |
| pip + venv | 官方基础方案 | 简单可靠,需手动管理 lock |
| pipenv | Pipfile 方案 | 曾经流行,逐渐被替代 |
uv(速度最快)或 pdm(PEP 标准最完整)。已有项目用 Poetry。避免 pipenv。
类型检查与代码质量
| 工具 | 用途 | 说明 |
|---|---|---|
| ruff | Linter + Formatter | Rust 实现,极快;替代 flake8+isort+black |
| mypy | 类型检查 | 事实标准,插件生态最丰富 |
| pyright | 类型检查 | 微软出品,VSCode 内置 |
| bandit | 安全扫描 | 常见安全漏洞检测 |
| pre-commit | Git hooks | 提交前自动运行 lint/format |
| vulture | 死代码检测 | 找出未使用的代码 |
ruff (lint+format) + mypy (type check) + pre-commit (自动化) + bandit (安全)。CI 中一站式验证。
5.12 典型组合方案
轻量级单体
适合:原型、内部工具、个人项目、小团队 MVP
FastAPI SQLAlchemy 2.0 SQLite → PostgreSQL Pydantic v2 Alembic Uvicorn Docker Compose pytest
- 单仓库,按模块分 router;SQLite 开发,生产切 PostgreSQL
BackgroundTasks处理轻量异步;需重任务再加 Celery/RQ- fastapi-users + JWT 认证;structlog + Sentry 可观测
- uv/pdm 管理包;ruff + mypy 代码质量
中大型业务
适合:企业级业务系统、SaaS、管理后台
FastAPI 或 Django+Ninja SQLAlchemy 2.0 + Alembic PostgreSQL + Redis Celery + RabbitMQ Pydantic v2 + pydantic-settings Docker + K8s Prometheus + Grafana pytest + hypothesis
- 分层架构:router → service → repository → model
- JWT + OIDC (Keycloak/Auth0);RBAC 权限
- Redis 缓存 + Celery 异步任务;告警+监控完备
- OpenTelemetry 全链路追踪;Sentry 错误收集
- CI: GitHub Actions (lint → test → build → deploy)
微服务
适合:大规模分布式系统、多团队协作
FastAPI / Litestar gRPC (内部 RPC) Kafka + Redis SQLAlchemy 2.0 · 独立 DB PostgreSQL · MongoDB K8s + Helm · Istio OpenTelemetry · Jaeger
- 服务间 gRPC 通信;对外开放 RESTful/GraphQL API Gateway
- 事件驱动:Kafka 作为事件总线 + CQRS/Event Sourcing
- 每个服务独立部署、独立扩展
- Service Mesh (Istio) 处理流量治理
- GitOps (ArgoCD) 持续部署
AI/ML 服务
适合:LLM 推理、ML 模型 API、AI Agent 后端
FastAPI Pydantic v2 OpenAI / Anthropic SDK Redis (缓存/限流) PostgreSQL + pgvector (向量) Celery (异步推理) Uvicorn + GPU Worker Docker + K8s (GPU 调度)
- SSE/WebSocket 流式响应
- LangChain / LlamaIndex 集成
- pgvector 向量检索;Redis 缓存推理结果
- GPU Worker 独立扩缩容
- 速率限制 + Token 计费
数据工程
适合:ETL、数据管道、报表、数据分析平台
Django 或 FastAPI Airflow / Prefect / Dagster SQLAlchemy + pandas/polars PostgreSQL · ClickHouse · DuckDB Docker + K8s dbt (数据转换)
- Airflow/Prefect 编排 DAG
- DuckDB 分析查询,ClickHouse 时序指标
- polars 替代 pandas 提升性能
- dbt 管理 SQL 转换
- Superset / Streamlit 可视化