【问题标题】:PyLint not recognizing cv2 membersPyLint 不识别 cv2 成员
【发布时间】:2019-01-12 12:51:19
【问题描述】:

我在一个 opencv 项目上运行 pylint,我在 VS 代码中收到许多关于成员不存在的 pylint 错误。

示例代码:

import cv2
cv2.imshow(....)

得到的错误:

但是,代码运行正常,没有任何错误。

版本:pylint 1.8.1,astroid 1.6.0

【问题讨论】:

    标签: opencv visual-studio-code pylint


    【解决方案1】:

    这是来自 pylint。您可以使用以下命令在项目的根目录中生成 pylint 配置文件: (如果您在团队中工作或在来自同一 repo 的不同计算机上工作,我发现这会很有帮助)

    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
    

    保存文件。 lint 错误应该会消失。

    【讨论】:

    • 如果你安装了 linter 扩展,可能是文件 .pylintrc 已经存在 - 它可能是空的。您只需添加行 extension-pkg-whitelist=cv2 并保存。
    【解决方案2】:

    我不必像这里的大多数答案一样更改 pylint Jason 文件中的任何内容我的解决方案是将导入语句更改为以下形式

    from cv2 import cv2
    

    终于可以使用cv2成员了!

    【讨论】:

    • @SimonLundberg 我实际上试图找到答案..但我找不到..但仍然有效!
    【解决方案3】:

    尝试像这样导入 cv2:from cv2 import cv2

    【讨论】:

    • 如果你能描述他们的问题是什么/错误是什么以及如何解决它会很好。
    • 这确实有效——至少对我而言——但是whyyyy
    • 为什么?!这很有趣。
    • 在你告诉我它为什么起作用之前,我不会给你竖起大拇指...
    • 较新的 pylint 版本 (2.10.2) 只需将消息从 no-member 更改为 c-extension-no-member 并建议将模块添加到“extension-pkg-allow-list”作为回答 here跨度>
    【解决方案4】:
    1. 在 VScode 上:CTRL + Shift + P
    2. 选择“首选项:打开设置 (JSON)”
    3. 将此行添加到 JSON 文件中: "python.linting.pylintArgs": ["--generate-members"]

    完成,它对我有用

    注意:确保选择“首选项:打开设置 (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"] }
    

    【讨论】:

    • 没有选项'--generate-members'。我在 VS Code 中尝试过,我认为这可行,但结果 pylint 实际上退出并出现了 VS Code 中未显示的错误。
    • 谢谢!它在 VSCode 1.55.2 中就像一个魅力。
    • 是的,它也适用于 Windows 10 上的 VS Code 版本 1.56.2...
    • @Clément 是正确的:不,这不起作用。这打破了pylint,这就是为什么你的 lints 正在消失(全部消失!)。通过发出pylint --generate-members 或检查 VS Code 的输出 - Python 窗口来检查自己。我不敢相信这已被投票超过 40 次。
    【解决方案5】:

    我在 vscode 的 settings.json 中使用了以下配置设置,它帮助我避免了 pylint 不必要的标志,并且还获得了 cv2 工作的智能感知, 它不起作用尝试从 C:\Anaconda3\envs\demo1\Lib\site-packages 文件夹中卸载和删除 cv2 包,然后重新安装 opencv-python 包

    {
    "python.linting.pylintEnabled": true,
      "python.linting.enabled": true,
      "python.linting.pylintArgs": [
        "--extension-pkg-whitelist=cv2"
      ]
    }
    

    【讨论】:

      【解决方案6】:

      这里是 MS V 代码中 settings.json 文件的代码 sn-p

      "python.linting.pylintArgs":["--extension-pkg-whitelist=cv2"]
      

      【讨论】:

        【解决方案7】:

        是的,这是因为尚未安装扩展程序。 设置这个:extension-pkg-whitelist=cv2 就可以了。 但是它可能无法检测到 cv2 中实现的功能或模块

        【讨论】:

        • 如果您还添加代码 sn-ps 那就太好了,因为图像不可搜索,copy-paste-able
        • 感谢图片,比没有上下文的单行代码 sn-p 更有帮助。
        猜你喜欢
        • 2013-12-31
        • 2017-10-09
        • 1970-01-01
        • 1970-01-01
        • 2020-04-25
        • 1970-01-01
        • 2019-03-11
        相关资源
        最近更新 更多