【问题标题】:How do you make pylint in VSCode know that it's in a package (so that relative imports work)?你如何让 VSCode 中的 pylint 知道它在一个包中(以便相对导入工作)?
【发布时间】:2020-12-02 01:09:14
【问题描述】:

布局:

workspace/
  .vscode/launch.json
  main.py
  foo.py:
    def harr(): pass

launch.json:

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Python: Module",
            "type": "python",
            "request": "launch",
            "cwd": "${workspaceFolder}/..",
            "module": "${workspaceFolderBasename}"
        }
    ]
}

main.py 和 pylint 错误:

from .foo import harr
   ^

Attempted relative import beyond top-level package - pylint(relative-beyond-top-level)

如果不是 linter 错误,程序运行良好。我曾尝试在 __init__.py 和 pylintrc 中修改 sys.path,但结果是一样的。

有没有办法 VSCode 可以对文件运行 linting 并同时知道该文件是包的一部分?

我已经扫描了vscode linting 和 pylint 配置文档,但没有发现任何我所期望的。这应该很标准,我没有得到什么?如果 pylint 不知道顶级包,它应该如何计算相对导入?

【问题讨论】:

    标签: python python-3.x visual-studio-code python-import pylint


    【解决方案1】:

    目前pylint无法通过相对导入准确找到模块,虽然代码可以运行,但会弄乱路径。

    您可以尝试以下两种方法来解决:

    1.在setting.json文件中添加如下设置。

    "python.linting.pylintArgs": 
      ["--disable=all", 
        "--enable=F,E,unreachable,duplicate-key,unnecessary-semicolon,global-variable-not-assigned,unused-variable,binary-op-exception,bad-format-string,anomalous-backslash-in-string,bad-open-mode",
        "--disable=E0402", 
      ],
    

    (由于代码没有问题,我们可以关闭这种类型的pylint提示。)

    1. 由于相对导入方式会使pylint混淆,我们可以避免这样的使用。

      使用“from foo import harr”代替“from .foo import harr”。

    参考:Default Pylint rules

    【讨论】:

    • 感谢您的回答,但不是最佳解决方案。很伤心的pylint。我想如果 python 导入系统不会那么糟糕,他们支持这个是没有问题的。
    【解决方案2】:

    今天早上我遇到了同样的问题。

    事实证明,您可以在根路径中添加 init .py 文件。

    workspace/
        .vscode/launch.json
        __init__.py
        main.py
        foo.py
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-11-01
      • 2023-03-29
      • 1970-01-01
      • 1970-01-01
      • 2022-08-18
      • 2023-01-30
      • 1970-01-01
      相关资源
      最近更新 更多