用途:指导现代 Python 工具链与最佳实践,适用于创建新项目或包、配置 pyproject.toml、设置开发工具(lint、格式化、测试)、编写带外部依赖的脚本,以及按用户要求从旧工具迁移。不适用于用户明确想保留旧工具、需要 Python < 3.11、或 Python 非主要语言的混合代码库。
主要能力与工具:uv 负责包与依赖管理(替代 pip、virtualenv、pip-tools、pipx、pyenv);ruff 负责 lint 与格式化(替代 flake8、black、isort、pyupgrade、pydocstyle);ty 做类型检查(替代 mypy、pyright);pytest 做测试与覆盖率;prek 做 pre-commit 钩子。安全工具包括 shellcheck、detect-secrets、actionlint、zizmor、pip-audit、Dependabot。
使用方式:最小项目用 uv init myproject,再 uv add requests rich、uv add --group dev pytest ruff ty,用 uv run 执行命令。完整项目用 uv init --package myproject,配置 pyproject.toml 的 [project]、[dependency-groups]、[tool.ruff]、[tool.pytest]、[tool.ty] 等段,然后 uv sync --all-groups。可用 uvx cookiecutter gh:trailofbits/cookiecutter-python 引导完整项目。单文件脚本用 PEP 723 内联元数据。临时依赖用 uv run --with <pkg> <cmd>。
关键原则:始终用 uv add / uv remove 管理依赖,不手动编辑 pyproject.toml 加依赖;不手动激活虚拟环境,统一用 uv run;开发/测试/文档依赖用 [dependency-groups](PEP 735)而非 [project.optional-dependencies];构建后端用 uv_build 而非 hatchling;用 ty 而非 mypy/pyright;用 prek 而非 pre-commit。
迁移:从 requirements.txt 用 uv init --bare 后逐个 uv add,再删除旧文件与虚拟环境,将 uv.lock 纳入版本控制;从 setup.py/setup.cfg、flake8+black+isort、mypy/pyright 迁移均有对应步骤。
限制:面向现代 Python(>=3.11),不适用于需保留旧工具或非 Python 项目;具体配置细节需参考随附的 pyproject.md、uv-commands.md、ruff-config.md、testing.md、pep723-scripts.md、prek.md、security-setup.md、dependabot.md 等文档。