本文目录导读:

Python项目现代化改造的最佳实践涵盖代码质量、工具链、架构、测试和部署等多个方面,以下是核心实践建议:
代码质量与风格
类型注解
# 旧代码
def add(a, b):
return a + b
# 现代化改造
from typing import Union, Optional
def add(a: Union[int, float], b: Union[int, float]) -> Union[int, float]:
return a + b
# 或使用更现代的语法(Python 3.10+)
def add(a: int | float, b: int | float) -> int | float:
return a + b
采用现代Python特性
- 使用 f-strings 替代 或
.format() - 使用
dataclasses替代简单类 - 使用类型别名和泛型
from dataclasses import dataclass
from typing import List, Optional
@dataclass
class User:
name: str
email: str
age: Optional[int] = None
项目结构与工具
标准项目结构
my_project/
├── pyproject.toml # 现代构建配置
├── src/
│ └── my_package/
│ ├── __init__.py
│ ├── core.py
│ └── utils.py
├── tests/
├── docs/
├── scripts/
├── .pre-commit-config.yaml
├── .github/
│ └── workflows/
└── Dockerfile
使用 pyproject.toml
[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"
[project]
name = "my_project"
version = "0.1.0"
requires-python = ">=3.11"
dependencies = [
"fastapi>=0.104.0",
"pydantic>=2.0.0"
]
[project.optional-dependencies]
dev = [
"pytest>=7.0",
"ruff>=0.1.0",
"mypy>=1.0"
]
依赖与包管理
现代化工具选择
- poetry: 完整的依赖管理和打包
- uv: 极快的pip替代
- hatch: 现代构建系统
- conda: 适用于科学计算
锁定依赖版本
# poetry.lock 或 requirements.txt # 使用 pip-tools 或 poetry 生成锁定文件
代码格式化与检查
统一工具链
# .pre-commit-config.yaml
repos:
- repo: https://github.com/astral-sh/ruff-pre-commit
rev: v0.1.0
hooks:
- id: ruff
- id: ruff-format
- repo: https://github.com/pre-commit/mirrors-mypy
rev: v1.7.0
hooks:
- id: mypy
测试最佳实践
现代测试方案
# 使用 pytest 替代 unittest
import pytest
from pytest import approx
@pytest.fixture
def sample_data():
return {"key": "value"}
@pytest.mark.asyncio
async def test_async_function():
result = await async_function()
assert result is not None
# 使用 pytest-cov 生成覆盖率报告
异步与并发
采用异步编程
# 旧同步代码
import requests
def fetch_data(url):
return requests.get(url).json()
# 现代化异步版本
import httpx
import asyncio
async def fetch_data(url: str) -> dict:
async with httpx.AsyncClient() as client:
response = await client.get(url)
return response.json()
配置管理
环境变量与配置
from pydantic_settings import BaseSettings
class Settings(BaseSettings):
database_url: str
api_key: str
debug: bool = False
class Config:
env_file = ".env"
settings = Settings()
容器化与部署
多阶段构建
# Dockerfile FROM python:3.11-slim AS builder WORKDIR /app COPY pyproject.toml poetry.lock ./ RUN pip install poetry && poetry export -f requirements.txt > requirements.txt FROM python:3.11-slim WORKDIR /app COPY --from=builder /app/requirements.txt . RUN pip install --no-cache-dir -r requirements.txt COPY src/ ./src/ CMD ["python", "-m", "my_package"]
日志与监控
结构化日志
import structlog
structlog.configure(
processors=[
structlog.stdlib.filter_by_level,
structlog.stdlib.add_log_level,
structlog.processors.TimeStamper(fmt="iso"),
structlog.processors.JSONRenderer()
]
)
logger = structlog.get_logger()
logger.info("user_login", user_id=123)
安全实践
- 使用
safety或pip-audit检查依赖漏洞 - 实施 content security policy
- 使用环境变量管理密钥
- 定期更新依赖
实施步骤
- 审计现状:评估代码库现状
- 渐进式改造:从工具链开始,逐步使用现代语法
- 添加测试:确保改造不影响功能
- 持续集成:配置CI/CD流水线
- 文档更新:同步更新开发文档
检查清单
- [ ] 使用
pyproject.toml替代setup.py - [ ] 添加类型注解
- [ ] 配置 ruff 或 black 格式化
- [ ] 实现完整测试覆盖
- [ ] 采用依赖锁定
- [ ] 实施 CI/CD
- [ ] 更新到 Python 3.11+
现代化改造是持续过程,建议每次迭代改进1-2个方面,保持向后兼容性。