ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

ty 在 monorepo 中如何用 --project 或 environment.root 检查多个 Python 包?

2026/9/14 18:15:10 拓冰建站 浏览量
ty 在 monorepo 中如何用 --project 或 environment.root 检查多个 Python 包? ty 在 monorepo 中如何用 --project 或 environment.root 检查多个 Python 包【免费下载链接】tyAn extremely fast Python type checker and language server, written in Rust.项目地址: https://gitcode.com/GitHub_Trending/ty2/ty在一个 monorepo 里多个 Python 包通常平铺在packages/这类目录下各自有独立的pyproject.toml和虚拟环境。ty 官方说明它支持 monorepo但嵌套项目的自动发现是有限制的默认情况下ty 用当前工作目录或--project选项来确定项目根目录见 docs/reference/typing-faq.md 的 Does ty support monorepos? 一节。也就是说ty 不会自动把每个子目录都当成独立项目来逐个检查你需要在下面两条路径中显式选一条。路径一按包检查——ty check --project 包目录这是 FAQ 给出的第一条做法从每个包目录运行ty check或用--project指定包ty check --project packages/package-a ty check --project packages/package-b--project的行为在 CLI 参考ty check --project条目中有明确说明命令在指定的项目目录内运行所有pyproject.toml会从该目录向上遍历目录树来发现该项目的虚拟环境.venv也会被一并发现除非设置了venv-path选项注意其余命令行参数例如相对路径仍相对于当前工作目录解析而不是相对于--project目录。每条命令只针对一个包包的pyproject.toml、.venv各自独立生效。如果你的仓库中每个包的包结构不同这是最不容易出歧义的主路径。路径二把多个包当作一个项目——配置environment.root如果你希望一条命令覆盖多个包可以在仓库根目录的配置里用environment.root列出所有包的源码目录。写在pyproject.toml[tool.ty.environment] root [packages/package-a, packages/package-b]或者写在ty.toml见 docs/modules.md 中的配置位置说明[environment] root [packages/package-a, packages/package-b]配置后在仓库根目录直接运行ty check即可命令与参数详见 docs/type-checking.md 和 docs/reference/cli.md。理解root的语义需要读 docs/reference/configuration.md 的root条目root是项目用于查找第一方模块的根路径列表按优先级顺序搜索列表中的第一项优先级最高如果不设置ty 会尝试识别常见项目布局自动初始化项目根.始终包含./src、./project-name、./python在存在且不是包不含__init__.py/__init__.pyi时也会被包含因此对于包平铺在packages/下的 monorepo 布局自动识别覆盖不到各包目录需要像上面这样显式列出。这条路径有一个 FAQ 明确指出的缺点所有包会被当作同一个项目处理可能出现 ty 认为某个导入可解析、而运行时实际不可导入的情况。如果各包之间不应互相导入或者各包依赖不同的虚拟环境优先选路径一。验证检查是否通过判断单次检查结果的依据是诊断输出与退出码根据 docs/reference/configuration.md 的说明默认情况下 ty 只要发出任何 warning 或 error 级别的诊断就以退出码 1 结束没有这类诊断时以退出码 0 结束所以无论用--project还是root方案在 CI 中直接跑命令后检查退出码即可0表示该包或该次检查范围没有 error/warning 诊断1表示需要查看诊断明细如需查看 ty 实际使用的模块搜索路径排查第一方模块找不到的情况可加-v运行-v为 verbose 输出见 docs/reference/cli.md。边界与限制自动发现嵌套项目目前能力有限这是 FAQ 原文给出的现状描述两个包的相对位置、root列表顺序第一项优先级最高都会影响第一方模块的解析结果调整布局时先确认root配置与目录实际一致root只解决第一方模块的定位第三方包仍按 docs/modules.md 描述的 Python 环境发现机制VIRTUAL_ENV、项目根或工作目录下的.venv、--python显式指定解析monorepo 中每个包有独立.venv时路径一能让 ty 针对每个包各自找到对应环境两种方案都不是一条命令无配置扫全仓库路径一靠逐包命令路径二靠显式root列表选择依据是包之间是否存在跨包导入和独立环境需求。【免费下载链接】tyAn extremely fast Python type checker and language server, written in Rust.项目地址: https://gitcode.com/GitHub_Trending/ty2/ty创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考