使用 venv 时 vscode 中的 pylint 误报 E0401 导入错误

新手上路,请多包涵

我在我的 mac 操作系统上使用 python3.6 在这个文件夹中创建了一个 venv /Users/kim/Documents/Apps/PythonApps/python36-miros-a3

激活虚拟环境后,我运行了 pip install pylint

我的工作区在 /Users/kim/Documents/Apps/WebApps/miros-a3

在我的 vscode 工作区中,我有以下工作区设置

{
    "folders": [
        {
            "path": "."
        }
    ],
    "settings": {
        "python.pythonPath": "/Users/kim/Documents/Apps/PythonApps/python36-miros-a3/bin/python3.6",
        "python.venvPath": "/Users/kim/Documents/Apps/PythonApps"
    }
}

我尝试为 pylint 设置自定义路径并更改 venvpath。

pylint一直抱怨import语句说它不存在。

在此处输入图像描述

在此处输入图像描述

如您所见,它们在同一个文件夹中,我绝对可以执行我的 python 文件。

我该怎么做才能避免此类误报导入错误?

我还尝试了以下方法:

  1. 转到命令行打开虚拟环境,然后键入 code 以按照此处推荐的方式激活 vscode https://code.visualstudio.com/docs/setup/mac
  2. 也试过这个 https://donjayamanne.github.io/pythonVSCodeDocs/docs/troubleshooting_linting/

原文由 Kim Stacks 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.2k
2 个回答

Pylint 有一些怪癖。在这种情况下,它不知道在哪里可以找到您的模块,因为它位于您的 venv 路径的子目录中。要解决这个问题:

  1. 将此设置放入您的工作区或文件夹设置中:
    "python.linting.pylintArgs": [
       "--init-hook",
       "import sys; sys.path.append('<path to folder your module is in>')"
   ]

或者,也许更好

  1. 生成 .pylintrc 文件。从带有 venv 激活运行的集成终端:
    pylint --generate-rcfile > .pylintrc

然后打开生成的文件并取消注释 init-hook= 部分为:

    init-hook='import sys; sys.path.append("<path to folder you module is in>")'

如果需要,请阅读 .pylintrc 并调整设置。在这两种情况下,路径都应指向您的“数据库”文件夹。

  1. 了解了pylint设置后,正确的做法是:
    from database.database_dispatcher import ...

请参阅 Anthony Sottile 的 回答

原文由 Braca 发布,翻译遵循 CC BY-SA 4.0 许可协议

对我来说, pylint 在这里标记这个错误是正确的

顶层模块是 database (它包含一个 __init__.py 文件)

您的导入应该看起来像(完全绝对)

 from database.database_dispatcher import ...

或(显式相对)(是的!模块名称之前的 . 是故意的)

 from .database_dispatcher import ...

我的后续猜测是,您当前正在将脚本调用为 python ./database/main.py ..../database 放在 的开头 sys.path 所以它会 出现 工作正常——然而,这是在绕过你的模块结构。您应该使用 python -m database.main ... 来调用您的脚本。

请注意,在 python 3.x 中删除了 隐式相对 导入——尽管这个 (imo) 脚本疣 sys.path 插入仍然存在。

原文由 anthony sottile 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进