pyright 如何声明自定义内置符号:使用 __builtins__.pyi 扩展 builtins 作用域

发布时间:2026/9/14 3:17:27
pyright 如何声明自定义内置符号:使用 __builtins__.pyi 扩展 builtins 作用域 pyright 如何声明自定义内置符号使用builtins.pyi 扩展 builtins 作用域【免费下载链接】pyrightStatic Type Checker for Python项目地址: https://gitcode.com/GitHub_Trending/py/pyright如果你的 Python 环境经过定制例如运行时在每个模块里隐式注入了额外的类型或函数Pyright 在静态检查时并不认识这些符号它们既不在你导入的模块里也不在标准builtins中。Pyright 通过本地类型桩文件__builtins__.pyi支持声明这类符号。完成本文操作后这些符号会在项目的所有源文件中直接可用无需importPyright 不再对它们的引用报未知符号错误。以下内容适用于 Pyright 命令行版本和编辑器语言服务器依据仓库内 docs/builtins.md、docs/configuration.md 等文档整理。Pyright 从哪里认识 builtins 符号Python 解释器会向每个模块隐式提供一组符号list、dict、int、min、len等。Pyright 对这些符号的知识来自类型桩文件builtins.pyi——该文件来自 typeshed 仓库随 Pyright 一起内置分发。对于你环境里额外注入的 builtins 符号Pyright 提供的扩展机制就是本地桩文件__builtins__.pyi见 docs/builtins.md。创建builtins.pyi 文件在以下两个位置之一创建名为__builtins__.pyi的文件文件名必须精确匹配项目目录的根目录推荐主路径stubPath配置项所指目录的根目录。stubPath的默认值是./typings相对于配置文件位置解析见 docs/configuration.md 中stubPath条目说明。注意区别普通第三方包的桩文件要放在 stubPath 下各自的子目录里而__builtins__.pyi直接放在该目录根部。文件内容使用标准.pyi桩语法。仓库自带的 fourslash 测试用例 completions.builtinOverride.fourslash.ts 给出了一个可直接参照的最小示例下方为文档示例# __builtins__.pyi class CustomClass: ... my_var: int ...在代码中直接使用声明的符号__builtins__.pyi里的符号属于 builtins 作用域项目内任意源文件都可以不使用任何import直接引用。沿用上面的符号名示例结果# test.py x CustomClass() y my_var验证声明是否生效命令行验证。用pyright检查项目安装方式见 docs/installation.md如npm install -g pyright后运行pyright options。根据 docs/command-line.md 的退出码表pyright退出码0No errors reported说明代码中对CustomClass、my_var的引用没有被当作未知符号报错退出码1One or more errors reported可结合诊断输出定位问题。编辑器行为。在上述仓库测试用例中在test.py里输入Cust时补全列表出现CustomClassClass 类型输入my_v时出现my_varVariable 类型——即声明的符号会进入普通补全文档示例。修改即时生效。源码 program.ts 中对builtins.pyi和__builtins__.pyi做了特殊处理它们是隐式包含进所有源文件的一旦该文件发生变化Pyright 会把所有文件标记为 dirty 并重新分析不需要手动重启检查器。另外虽然__builtins__.pyi没有对应的.py源文件Pyright 不会为它报缺少源文件类的诊断program.ts 中明确将其视为仅桩文件的 builtins 扩展机制。符号仍不被识别时如何排查确认文件名精确为__builtins__.pyi且位于项目根目录或 stubPath 根部不是其某个子目录内。如果通过stubPath指定位置检查配置是否正确pyrightconfig.json中的stubPath条目VS Code 中对应python.analysis.stubPath设置。导入解析时 stubPath 是第一顺位搜索位置见 docs/import-resolution.md 的 Resolution Order。开启详细日志确认导入解析过程命令行传--verbose或在配置文件中加verboseOutput: true。docs/import-resolution.md 建议报告导入解析问题时附带这些日志。限制该文件只影响 Pyright 的静态分析。docs/builtins.md 的场景描述是你的环境在运行时已经提供了这些额外符号__builtins__.pyi只是把这一事实告知 Pyright它不会向运行时注入任何符号。它扩展的是 builtins 作用域不会覆盖内置builtins.pyi中的标准符号定义。【免费下载链接】pyrightStatic Type Checker for Python项目地址: https://gitcode.com/GitHub_Trending/py/pyright创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考