我在一个 opencv 项目上运行 pylint,我在 VS 代码中收到许多关于成员不存在的 pylint 错误。
示例代码:
import cv2
cv2.imshow(....)
获得的错误:
但是,代码运行正确,没有任何错误。
版本:pylint 1.8.1,astroid 1.6.0
这是来自pylint。您可以使用以下命令在项目的根目录中生成一个 pylint 配置文件: (如果您在团队中工作或在同一存储库的不同计算机上工作,我发现这会很有帮助)
pylint --generate-rcfile > ~/.pylintrc
在生成的 .pylintrc 文件的开头你会看到
# A comma-separated list of package or module names from where C extensions may
# be loaded. Extensions are loading into the active Python interpreter and may
# run arbitrary code.
extension-pkg-whitelist=
添加 cv2 所以你最终得到
# A comma-separated list of package or module names from where C extensions may
# be loaded. Extensions are loading into the active Python interpreter and may
# run arbitrary code.
extension-pkg-whitelist=cv2
保存文件。 皮棉错误应该消失。
完成,对我有用
注意:确保选择“首选项:打开设置(JSON)”,而不是“首选项:打开默认设置(JSON)”
设置文件看起来像
{
"workbench.iconTheme": "vscode-icons",
"python.dataScience.sendSelectionToInteractiveWindow": true,
"kite.showWelcomeNotificationOnStartup": false,
"python.dataScience.askForKernelRestart": false,
"python.dataScience.jupyterServerURI": "local",
"python.pythonPath": "/usr/bin/python3",
"workbench.colorTheme": "Monokai",
"vsicons.dontShowNewVersionMessage": true,
"python.linting.pylintArgs": ["--generate-members"] }
尝试像这样导入 cv2:
from cv2 import cv2
这里是 MS V 代码中 settings.json 文件的代码片段
"python.linting.pylintArgs":["--extension-pkg-whitelist=cv2"]
在 VSCode 中,编辑 Settings JSON (
Ctrl
+Shift
+P
, > "Preferences: Open Settings JSON)
然后,将以下内容粘贴到 JSON 中:
"python.linting.pylintArgs": [
... // prievious arguments
"--generated-members=cv2.*"
]
不知道为什么,但其他解决方案(白名单等)对我不起作用,我不想创建
.pylintrc
文件。
我不必像这里的大多数答案那样更改 pylint Jason 文件中的任何内容我的解决方案是将导入语句更改为以下形式
from cv2 import cv2
终于可以使用cv2成员了!
我在 vscode 的 settings.json 中使用了以下配置设置,它帮助我避免了 pylint 的不必要标志,并且还获得了 cv2 工作的智能感知, 它不起作用尝试从 C:\Anaconda3 nvs\demo1\Lib\site-packages 文件夹中卸载和删除 cv2 包,然后重新安装 opencv-python 包
{
"python.linting.pylintEnabled": true,
"python.linting.enabled": true,
"python.linting.pylintArgs": [
"--extension-pkg-whitelist=cv2"
]
}
正如在这个封闭的pylint问题中所讨论的,
extension-pkg-whitelist=cv2
并不总是有效。同时,--generated-members=cv2.*
解决了大部分时间的问题。因此,可以在命令行中将generated-members
配置为pylint --generated-members=cv2.*
或者将配置放在pyproject.toml
文件中为
[tool.pylint.typecheck]
# List of members which are set dynamically and missed by pylint inference
# system, and so shouldn't trigger E1101 when accessed. Python regular
# expressions are accepted.
generated-members = ["cv2.*"]
注意,上面的配置可以由
pylint --generated-members=cv2.* --generate-toml-config
根据官方文档自动生成。