You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否通过API在代码中调用微软的Python类型检查工具Pyright?

Pyright的代码内调用方案

Pyright官方并未提供类似mypy的Python原生API,它的核心基于TypeScript开发,主要设计为命令行工具(CLI)或VS Code扩展使用。不过你可以通过以下几种方式在Python代码中实现调用:

1. 直接调用CLI(最通用方式)

使用Python的subprocess模块执行Pyright的命令行指令,捕获输出结果。示例代码:

import subprocess

# 检查单个Python文件
result = subprocess.run(
    ["pyright", "your_script.py"],
    capture_output=True,
    text=True
)
print("返回码:", result.returncode)
print("标准输出:\n", result.stdout)
print("错误输出:\n", result.stderr)

# 检查整个项目(需确保项目根目录有pyrightconfig.json)
result = subprocess.run(
    ["pyright"],
    capture_output=True,
    text=True,
    cwd="/path/to/your/project"
)

2. 使用第三方封装库

有第三方开发者封装了Pyright的Python调用接口,比如pyright-python,可以通过pip安装后直接在代码中调用:

pip install pyright-python

调用示例:

from pyright import Pyright

# 检查单个文件
pyright = Pyright()
result = pyright.check("your_script.py")
print(result)

# 检查整个项目
result = pyright.check_project("/path/to/your/project")

注意:这是非官方维护的库,功能兼容性可能随Pyright官方版本更新变动,使用前请确认版本匹配。

3. 调用Node.js API(深度集成)

如果需要更灵活的控制(比如自定义检查规则、实时获取诊断信息),可以直接调用Pyright的TypeScript API:

  1. 先通过npm安装Pyright:npm install -g pyright
  2. 编写Node.js脚本调用API,比如pyright_check.js:
const { LanguageService } = require('pyright/dist/languageService');
const { createServiceHost } = require('pyright/dist/serviceHost');

// 配置检查参数
const config = {
    rootPath: '/path/to/your/project',
    fileNames: ['your_script.py']
};

const host = createServiceHost(config);
const service = new LanguageService(host);

// 执行检查并输出结果
const diagnostics = service.getDiagnostics('your_script.py');
console.log(JSON.stringify(diagnostics));
  1. 在Python中通过subprocess调用该Node脚本:
import subprocess
import json

result = subprocess.run(
    ["node", "pyright_check.js"],
    capture_output=True,
    text=True
)
diagnostics = json.loads(result.stdout)
print(diagnostics)

内容的提问来源于stack exchange,提问作者laike9m

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 16:03:12