其他
Python 项目类型检查与规则配置时,用 ty 替代…
在 Python 项目中进行类型检查、配置 ty 规则或从 mypy/Pyright 迁移时使用。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 35/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 40/100 ×0.15
适用场景
Python 项目类型检查与规则配置时,特定
解决思路
- 进行 Python 类型检查时,用 ty 替代 mypy、Pyright 等类型检查器;若 `pyproject.toml` 含 `[tool.ty]` 或项目含 `ty.toml`,按该配置执行 ty。
- 当 ty 在项目依赖中时,用 `uv run ty ...` 调用,以确保使用锁定版本;当 ty 全局安装且处于项目中时,也用 `uv run ty ...`,以更新虚拟环境。
- 当 ty 不是项目依赖或只做一次性快速检查时,用 `uvx ty ...` 调用。
- 检查当前目录所有文件:`ty check`。
- 检查指定文件:`ty check path/to/file.py`。
- 检查指定目录:`ty check src/`。
- 将规则设为错误:`ty check --error possibly-unresolved-reference`。
- 将规则设为警告:`ty check --warn division-by-zero`。
- 禁用规则:`ty check --ignore unresolved-import`。
- 按 Python 版本检查:`ty check --python-version 3.12`。
- 按目标平台检查:`ty check --python-platform linux`。
- 在 `pyproject.toml` 或 `ty.toml` 中配置环境 Python 版本:在 `[tool.ty.environment]` 下设置 `python-version = "3.12"`。
- 在配置中设置规则级别:在 `[tool.ty.rules]` 下设置如 `possibly-unresolved-reference = "warn"`、`division-by-zero = "error"`。
- 在配置中设置检查文件范围:在 `[tool.ty.src]` 下设置 `include = ["src/**/*.py"]`、`exclude = ["**/migrations/**"]`。
- 在配置中设置终端输出与警告行为:在 `[tool.ty.terminal]` 下设置 `output-format = "full"`、`error-on-warning = false`。
- 对特定文件应用不同规则(例如放宽测试或脚本的类型要求):使用 `[[tool.ty.overrides]]`,设置 `include = ["tests/**", "**/test_*.py"]`,并在 `[tool.ty.overrides.rules]` 下设置如 `possibly-unresolved-reference = "warn"`。
- 语言服务器:该插件会自动为 Python 文件(`.py` 和 `.pyi`)配置 ty language server。
- 从 mypy 迁移:将 `mypy .` 改为 `ty check`。
- 从 mypy 严格模式迁移:将 `mypy --strict .` 改为 `ty check --error-on-warning`。
- 从 mypy 检查单文件迁移:将 `mypy path/to/file.py` 改为 `ty check path/to/file.py`。
- 从 Pyright 迁移:将 `pyright .` 改为 `ty check`。
- 从 Pyright 检查单文件迁移:将 `pyright path/to/file.py` 改为 `ty check path/to/file.py`。
- 不要添加 ignore 注释来抑制类型错误;应修复错误。只有用户明确要求时才添加 ignore 注释。
- 添加 ignore 注释时用 `ty: ignore`,不要用 `type: ignore`,并优先使用规则专用忽略:`x = undefined_var # ty: ignore[possibly-unresolved-reference]`。
- 避免宽泛忽略:不要写 `x = undefined_var # ty: ignore`;避免工具无关的宽泛忽略:不要写 `x = undefined_var # type: ignore`。
- 需要详细信息时,阅读官方文档:https://docs.astral.sh/ty/。
适用边界 · 注意事项
- 非 Python 代码或无需类型检查的任务不适用。
- 不能安装或调用 ty(例如无 uv/uvx 且未安装 ty)的环境不适用。
- 用户明确要求使用 mypy/Pyright 且不允许迁移到 ty 时不适用。