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

Kim*_*cks 11 pylint virtualenv python-3.x python-venv visual-studio-code

我在我的mac os上使用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"
    }
}
Run Code Online (Sandbox Code Playgroud)

我已经尝试为pylint设置自定义路径,也改变了venvpath.

pylint一直在抱怨导入声明说它不存在.

在此输入图像描述

在此输入图像描述

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

我该怎么做才能避免这种误报导入错误?

我也尝试过以下方法:

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

Bra*_*aca 11

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

  1. 将此设置放在您的工作区或文件夹设置中:

    "python.linting.pylintArgs": [
        "--init-hook",
        "import sys; sys.path.append('<path to folder your module is in>')"
    ]
    
    Run Code Online (Sandbox Code Playgroud)

    或者,也许更好

  2. 生成.pylintrc文件。从带有venv激活运行的集成终端:

    pylint --generate-rcfile > .pylintrc 
    
    Run Code Online (Sandbox Code Playgroud)

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

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

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

  3. 了解有关pylint的设置后,请以正确的方式进行操作:

    from database.database_dispatcher import ...
    
    Run Code Online (Sandbox Code Playgroud)

    请参阅Anthony Sottile的答案

  • 我更喜欢第一种方法,因为它可以通过使用 `{workspaceFolder}` 在任何系统上工作:`"import sys; sys.path.append({workspaceFolder})"` (2认同)

Gat*_*ndo 7

只是我的 0.02 美元,说明我如何在我的情况下解决这个问题。

我的问题完全与全局安装 pylint 并在 venv 中编码有关。vscode 尝试使用全局安装的 pylint,它根本不知道我在 Python venv 中安装的依赖项。这个答案解决了我的问题。它指向此处,解释了如何配置 vscode 以使用 venv 为我的项目运行。一旦我这样做了,vscode 立即抛出一个警告,说我没有安装 linting 工具,并提示我安装一个。一旦完成,我的错误误报就消失了。


Ant*_*ile 5

对我来说,pylint在此处标记此错误是正确的

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

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

from database.database_dispatcher import ...
Run Code Online (Sandbox Code Playgroud)

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

from .database_dispatcher import ...
Run Code Online (Sandbox Code Playgroud)

我的跟进猜测是,你目前正在调用脚本为python ./database/main.py ...它投入./database在年初sys.path所以会出现你的进口正常工作-这是方步进但是你的模块结构。您应该python -m database.main ...改为使用来调用脚本。

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