pylint假阳性E0401在使用venv时在vscode中导入错误

时间:2018-06-29 06:21:19

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

我在此文件夹的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"
    }
}

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

pylint一直抱怨进口声明说它不存在。

enter image description here

enter image description here

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

我该如何避免这些错误的肯定的导入错误?

我也尝试了以下方法:

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

4 个答案:

答案 0 :(得分:4)

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

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

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

    或者可能更好

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

    pylint --generate-rcfile > .pylintrc 
    

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

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

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

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

    from database.database_dispatcher import ...
    

    请参见Anthony Sottile的this answer

答案 1 :(得分:3)

对我来说,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中删除了相对隐式导入-尽管脚本sys.path插入的这种(imo)缺陷仍然存在。

答案 2 :(得分:1)

我只需要0.02美元就可以解决自己的问题。

我的问题完全与在全球安装pylint以及在venv中编码有关。 vscode试图使用全局安装的pylint,它根本不知道我在Python venv中安装的依赖项。这个answer解决了我的问题。它指向here,它解释了如何配置vscode以使用venv运行我的项目。一旦完成该操作,vscode就会立即发出警告,提示我未安装任何棉绒工具,并提示我安装工具。完成之后,我的绒毛假阳性就消失了。

答案 3 :(得分:0)

扩展Gatmando的答案,您需要告诉vscode使用.env中的pylint而不是全局pylint:

在您的工作区设置文件:.vscode/settings.json中,添加python.linting.pylintPath并将其指向pylint中的virtualenv包:

{
    "python.pythonPath": ".env/bin/python",
    "python.linting.pylintPath": ".env/bin/pylint"
}