Pylance不应该报出未知属性的错误

编程语言 2026-07-08

在我的工作区,我使用的是自己本地编译的Sofa库版本,并在我自己的代码中使用。

在编辑器中,Pylance会在我使用Sofa的子属性时报错,错误信息像 "Core" is not a known attribute of module "Sofa" Pylance(reportAttributeAccessIssue) [Ln 21, Col 37] 一样,例如

import Sofa
rootNode = Sofa.Core.Node("root")
                ^^^^

而实际上这段代码是正确的。

从终端来看,库确实是从构建目录加载的,并且位于正确的目录 PYTHONPATH

>>> Sofa.__file__
'/home/me/Documents/sofa/build/lib/python3/site-packages/Sofa/__init__.py'

$ echo $PYTHONPATH
/home/me/Documents/sofa/build/lib/python3/site-packages

以下是我的工作区的目录树

.venv
  └ ... # Content of python venv
build
  └ lib/python3/site-packages
    └ Sofa
      ├ Core.cpython...so
      ├ __init__.py
      └ ...
src/...

在VSCode工作区中选择的解释器是位于 .venv 目录中的那个,当我在终端运行一些脚本时,一切都正常。

我尝试把 "${workspaceFolder}/build/lib/python3/site-packages" 添加到设置 "python.analysis.extraPaths",让Pylance也在这里查找,但仍然有错误。

我该如何去除这些其实并非真正错误的报错?

解决方案

我终于向Claude求助,请他给出修复方案……
他给了我两种去除这些错误信息的办法:

忽略该信息: 可以在所有相关行末尾添加 # type: ignore[reportAttributeAccessIssue],或者在 settings.json 中禁用它们。

"python.analysis.diagnosticSeverityOverrides": {
    "reportAttributeAccessIssue": "none"
}

我看到的主要缺点是,实际的错误确实可能发生,然后被类型检查器跳过……

为库生成一个 stub 使用程序 pybind11-stubgen:

source .venv/bin/activate
pip install pybind11-stubgen
export PYTHONPATH=/home/me/Documents/sofa/build/lib/python3/site-packages
pybind11-stubgen Sofa -o stubs

然后在 settings.json 中添加这些行

{
  "python.analysis.stubPath": "${workspaceFolder}/stubs",
  "python.analysis.extraPaths": [
    "${workspaceFolder}/build/lib/python3/site-packages"
  ]
}

缺点是如果对生成的stub进行了修改,可能与构建版本不同。

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章