代码质量工具
black、ruff、yapf、sphinx、code-formatting。
25 分钟
开发工具链
一致的 ruff、mypy、pre-commit 配置让团队少争论风格、多关注逻辑。本课串联 typing 与 testing 课中的工具。基础环境见 python-fundamentals;Agent 仓库同样依赖 lint/CI,见 ai-agents-essentials;/roadmaps/python。
学习目标
- 用 ruff 替代 flake8 + isort + 部分 pyupgrade
- 配置 pre-commit 在提交前自动检查
- 了解 debugpy、rich 等日常效率工具
ruff 配置
# pyproject.toml
[tool.ruff]
line-length = 100
target-version = "py311"
[tool.ruff.lint]
select = ["E", "F", "I", "UP", "B"]
ignore = ["E501"]
[tool.ruff.format]
quote-style = "double"
ruff check . --fix
ruff format .
pre-commit
# .pre-commit-config.yaml
repos:
- repo: https://github.com/astral-sh/ruff-pre-commit
rev: v0.8.0
hooks:
- id: ruff
args: [--fix]
- id: ruff-format
- repo: https://github.com/pre-commit/mirrors-mypy
rev: v1.13.0
hooks:
- id: mypy
additional_dependencies: [types-requests]
pip install pre-commit
pre-commit install
pre-commit run --all-files
调试与日志
import logging
from rich.logging import RichHandler
logging.basicConfig(
level=logging.INFO,
format="%(message)s",
handlers=[RichHandler(rich_tracebacks=True)],
)
log = logging.getLogger(__name__)
log.info("processing lesson %s", "pya-tooling")
VS Code / Cursor:.vscode/launch.json 配置 debugpy 断点调试 FastAPI 或脚本。
工具选型(2025)
| 用途 | 推荐 |
|---|---|
| Lint + format | ruff |
| 类型 | mypy 或 pyright |
| 测试 | pytest |
| 包管理 | uv 或 pip + pyproject |
| 文档 | MkDocs / Sphinx |
练习
- 为当前项目添加 ruff 配置并 fix 全部告警
- 安装 pre-commit,故意提交含 lint 错误的文件观察拦截