Visual Studio Code中的Pylint“无法解析的导入”错误


137

我正在使用以下设置

  • macOS v10.14(Mojave)
  • 的Python 3.7.1
  • Visual Studio代码1.30
  • 皮林特2.2.2
  • Django 2.1.4

我想使用棉绒使我的生活在Visual Studio Code中更加轻松。但是,对于每个导入,我都有“未解决的导入”状态。即使是默认的Django导入(即从django.db导入模型)。

我认为这是因为它没有看到虚拟环境Python文件。

一切正常,但开始变得烦人。

我拥有的解释器选择都是Python的所有系统版本。似乎根本看不到我的虚拟环境Python(它与我的工作空间不在同一个目录中,所以这很有意义)。

如果我在settings.json文件中设置了python.PythonPath,它只会忽略它,并且不会将我的虚拟环境路径作为选项列出。我也尝试在全局Python设置中进行设置,但它也没有显示。

有快速解决方案可以使其正常工作吗?


3
pip install pylint-django,然后在vs代码设置中添加以下内容:"python.linting.pylintArgs": [ "--load-plugins=pylint_django", ],
Vaibhav Vishal

@VaibhavVishal不幸的是,我仍然得到相同的结果(将其添加到我的settings.json文件中)
jAC

4
它实际上是一个VScode问题,很晚才检测到导入包,重新启动后会自动修复。
阿努帕姆·霍尔德卡

Answers:


116

工作空间设置中,您可以像这样设置Python路径:

{
    "python.pythonPath": "/path/to/your/venv/bin/python",
}

30
这类作品。对于特定于Python的导入,它现在可以解决这些问题,但不能解决我自己的模型(即“来自users.models import User”仍然表示无法解决)。有什么想法吗?
jAC

7
不确定。请尝试重新加载vs代码的窗口(从shell中code <project_directory> -r),或仅重新启动vscode。
ruddra '18

5
我不确定,如果工作区目录设置不正确,有时可能会发生。请确保manage.py位于的根目录中workspace。另外,请确保正确配置
针脚

3
天才!这是因为我的工作空间不是从项目的根目录启动的。一旦我调整,它开始工作。非常感谢!
jAC

1
非常感谢!帮助我克服了一个古老的问题!

216

导入自己的模块时,可接受的答案无法解决错误。

在工作空间设置中使用以下设置.vscode/settings.json

"python.autoComplete.extraPaths": ["./path-to-your-code"],

参考:故障排除,未解决的导入警告


4
我有一个混合工作区,所有python代码都在一个子文件夹中。在子文件夹中添加.vscode将不起作用,这是唯一可行的解​​决方案。
雏菊

1
vscode settings.json的最佳答案。(如果使用workspace.xml,可以采用可接受的答案,但不能肯定地说。我也使用混合工作区),非常感谢您提供解决方案。

3
这应该是答案。
理查德·李

1
这对我有用!参考链接很好地解释了。TL; DR; 对于用户在子目录中创建的本地脚本,以上设置可帮助python解释器将子目录识别为自己的工作空间。随后,在导入整个模块或单个方法时,识别工作空间中的脚本并解决导入问题。
Avid程序员

5
大家好!我发现,在双星表示根目录下的任何子文件夹的情况下,[“ ./您的代码的路径”]可以为[“ ./**”]!这是一个更简单的解决方案。
alan23273850

63

另一种方法:使用命令界面!

Cmd/ Ctrl+ Shift+ PPython:选择“解释器” →选择要查找的软件包之一:

在此处输入图片说明


2
就我而言,这不起作用,但希望它可以帮助其他人解决此问题。
jAC

是的,这就是精神,这不是一个复杂的解决方案,这就是我发生的事情:)
TED

这对我有用。万一有人在2019
。– Safder

@Safder不适合我。使用virtualenv
dillon.harless

这对我有用。因为我有一个目录结构,所以每个python项目都有一个新目录venv,因此我将其指向venv该项目目录中的特定Python
cryanbhu

41

该问题已在GitHub上公开:

Python未解决的导入问题#3840

MagnuesBrzenk和Spe​​nHouet有两个非常有用的答案。

目前最好的解决方案是在项目根文件夹中创建一个.env文件。然后像这样添加一个PYTHONPATH:

PYTHONPATH=YOUR/MODULES/PATH

并在您的settings.json中添加:

"python.envFile": ".env"

6
谢谢,效果很好!"${workspaceFolder}/.env" PYTHONPATH=FolderName
KowaiiNeko '19

1
使用Microsoft Python语言服务器时,可编辑安装存在一个常见问题。但是,当前看起来像是在这里描述的新修复程序之后: github.com/microsoft/python-language-server/issues/…该问题已修复,可以使用ExtraPaths添加任何导入。看看这个故障排除以获得更多帮助:github.com/microsoft/python-language-server/blob/master/...
托马斯·胡齐克

谢谢@TomaszChudzik-设置:“ python.autoComplete.extraPaths”:[“ ./src”]就像一个魅力!
罗伯特

另一个解决方案是在您的virtualenv中添加代码库模块(add2virtualenv YOUR/MODULES/PATH例如,使用),然后选择该virtualenv作为python解释器。
安特万

21

如果settings.json文件中包含此代码,请将其删除:

{
    "python.jediEnabled": false
}

34
最好添加一些解释。
Tiw

1
编辑此行是您项目中的一大变化。行:“ python.jediEnabled”:false禁用旧的语言服务器,并启用新的Microsoft Python语言服务器。看这里:github.com/Microsoft/vscode-python/issues/2177我认为将必要的依赖项添加到我们的envFile中要容易得多。在另一个答案中对此进行了描述。使用新的Microsoft Python Language Server,Intellisense对我来说要好得多。
Tomasz Chudzik '19

对我而言,反之亦然,在settings.json中启用jedi对我有效。在此处查看更多信息,stackoverflow.com
a/57269144/2877493

@Tiw尤其如此,因为其他答案暗示了相反的意思。
Neinstein'9



17

如果您像我一样更直观,则可以在菜单文件首选项设置Ctrl+ ,)中使用Visual Studio Code配置。转到扩展Python

在“分析:已禁用”部分中,添加以下消息的禁止显示unresolved-import::

Visual Studio代码设置


3
相对进口的未解决进口显然是不正确的,这可以摆脱它。
萨蒂亚·米什拉

这只能解决警告,不能解决问题。如果我使用python path方法,则导入警告会消失,并且“钻取”(“ goto定义”)和“参数提示”也会起作用。
davidfrancis

9

您需要选择与虚拟环境关联的解释器。

在此处输入图片说明

单击此处(底部状态栏):

在此处输入图片说明

只需选择您正在使用的虚拟环境。做完了

有时,即使选择了口译员,它也不起作用。只需再次重复该过程即可解决。

在此处输入图片说明


1
这正是我的问题(在Mac上),选择合适的解释器即可解决。谢谢!
Mahm00d

9

除了这一解决方案,其他解决方案均无效。在settings.json中替换“ Pylance”或“ Microsoft”解决了我的问题。

"python.languageServer": "Jedi"

7

我想知道这个问题有(或没有)多少解决方案,我尝试了以上大多数方法,没有任何效果,唯一有效的解决方案是将python语言服务器设置为Jedi,而不是settings.json文件中的Microsoft:

"python.languageServer": "Jedi"

6

以前的答案都没有对我有用。但是,将以下两行添加到我的settings.json文件中。

"python.analysis.disabled": [
    "unresolved-import"
],
"python.linting.pylintArgs": ["--load-plugin","pylint_protobuf"]

第一行实际上只是隐藏了掉毛错误。当然不是永久性的解决方案,但会使屏幕杂乱无章。

这个答案给了我第二行:带有ProtoBuf编译的Python结构的VS Code PyLint错误E0602(未定义的变量)

也许比我更了解Python的人可以再解释一遍。


高兴的人们发现这很有用,但是有人可以解释第二个键值对吗?
dillon.harless

4

我的解决方案

此解决方案仅适用于当前项目。

  1. 在项目根目录中,创建文件夹 .vscode

  2. 然后创建文件 .vscode/settings.json

  3. 在文件中setting.json,添加该行(这是针对Python 3的)

    {
        "python.pythonPath": "/usr/local/bin/python3",
    }
    
  4. 这是Python 2的示例

    {
        "python.pythonPath": "/usr/local/bin/python",
    }
    
  5. 如果您不知道Python安装的位置,只需运行命令which pythonwhich python3在终端上即可。它将打印Python位置。

  6. 本示例适用于dockerized Python-Django。


4

对我来说,问题与我正在从事的项目有关。我花了一些时间才弄清楚,因此希望对您有所帮助:

原始文件夹结构:

    root/
    __init__.py  # Empty

        folder/
            __init__.py # Empty

            sub_folder_b/
                my_code.py
            sub_folder_c/
                another_code.py

在another_code.py中:

from folder.sub_folder_b import my_code.py

这并没有触发Visual Studio Code中的智能感知,但确实执行了OK。

另一方面,在导入路径上添加“ root”确实可以实现智能感知,但是在执行时引发了ModuleNotFoundError:

from root.folder.sub_folder_b import my_code.py

解决方案是删除“文件夹”目录中的_ init _.py文件,仅保留位于的_ init _.py /root


3

Shinebayar G的解决方案有效,但另一个解决方案则更为优雅:

Python未解决的导入问题#3840复制:

给定以下示例项目结构:

  • workspaceRootFolder
    • .vscode
  • ...其他文件夹
  • codeFolder

我为解决此问题所做的工作:

  1. 进入工作区文件夹(此处为workspaceRootFolder)并创建一个.env文件
  2. 在此空的.env文件中,添加PYTHONPATH = codeFolder行(用您的文件夹名称替换codeFolder)
  3. 将“ python.envFile”:“ $ {workspaceFolder} /。env”添加到settings.json
  4. 重新启动Visual Studio代码

2

这对我有用:

打开命令面板(Ctrl+ Shift+ P),然后选择“ Python:选择解释器”。

为此,您可以在Visual Studio Code中设置Python解释器。


就我而言。我的python 2解释器工作正常。只是我的python 3无法很好地合作
-lone_coder

2

发生这种情况是因为Visual Studio Code将当前文件夹视为主文件夹,而不是考虑实际的主文件夹。

修复的快速方法是它提供主文件夹的解释器路径。

Command+ Shift+ P(或大多数其他系统上的Ctrl+ Shift+ P)。

类型Python解释器

从可用选项中选择安装Python的路径。



1

我有一个不同的解决方案:我的Visual Studio Code实例选择了存储在中的virtualenv .venv,但是它使用了错误的Python二进制文件。它正在使用.venv/bin/python3.7; 使用蓝色状态栏中的切换台。

我将其更改为使用.venv/bin/python,所有导入均已正确解决。

我不知道在执行此操作时Visual Studio Code在后台执行的操作,也不知道为什么这导致了我的问题,但是对我来说,这是比编辑工作区设置更简单的解决方案。


1

如果出现Pylint错误,请安装以下内容

pipenv install pylint-django

然后在根文件夹中创建一个文件.pylintrc,并编写以下内容

load-plugins=pylint-django

1

如果正在使用,pipenv则需要指定虚拟环境.insettings.json文件的路径。例如 :

{
    "python.pythonPath": 
           "/Users/username/.local/share/virtualenvs/Your-Virual-Env/bin/python"
}

这会有所帮助。


1

对我来说,如果我将python,pylint和autopep8的路径设置为本地环境路径,它就可以工作。

为您的工作区添加/更改此:

"python.pythonPath": "...\\your_path\\.venv\\Scripts\\python.exe",
"python.linting.pylintPath": "...\\your_path\\.venv\\Scripts\\pylint.exe",
"python.formatting.autopep8Path": "...\\your_path\\.venv\\Scripts\\autopep8.exe",

使用工作区保存并重新启动VS Code。做完了!


这也对我有用,更具体地说,设置“ python.linting.pylintPath”是解决此问题的方法。在升级到Python 3.9之前,我从未遇到过这个问题。我的猜测是他们正在使用默认的pylint路径。
areed1192 '12

0

我已经通过Ctrl+ Shift+解决了导入错误P。键入“首选项设置”,然后选择选项“首选项打开设置(JSON)”

并添加行 "python.pythonPath": "/usr/bin/"

因此,JSON内容应类似于:

{
    "python.pythonPath": "/usr/bin/"
}

保留其他配置行(如果存在)。这应该导入您使用PIP安装的所有模块以实现自动完成。



0

就我而言,我已经激活了Conda环境,但是我仍然希望本地Python模块可用于自动完成,偷看定义等。

我尝试了许多解决方案,例如添加Python路径列表等,但最终为我解决的是创建从Condalib/python{your version}/site-packages到本地模块的符号链接。


0

我有一个库,当尝试使用Jedi语言服务将其包括在内时,会出错,并且在没有它的情况下也可以正常工作(即C#)。

该库是jsonslicer,它确实取决于我安装到的外部C库/usr/local/lib。可能与这有关吗?

我在Conda环境中安装了Jedi服务和库,并在Visual Studio中使用了该环境。它在运行时和终端上都可以正常运行,但是在检查源文件中的问题时却无法正常工作,并且显示为错误。


0

首先,请确保您已安装插件,但可能是工作区目录设置不正确。只需检查Pylint并编辑基础的settings.json文件。

{
    "python.pythonPath": "/usr/local/bin/python3",
    "git.ignoreLimitWarning": true
}

“检查Pylint”是什么意思?复选框?它存在/已安装?还有吗 通过编辑您的答案来回应,而不是在注释中(且不要带有“ Edit:”,“ Update:”或类似名称)。
彼得·莫滕森

0

安装代码运行器,并将以下代码添加到settings.json文件夹中:

    "code-runner.executorMap": {
        "python": "python3 -u",
    }

“ python”:“(带有模块或其路径的Python可执行文件-u”,


什么是“代码运行器”?您可以添加参考(通过编辑答案,而不是在注释中)吗?
Peter Mortensen

0

我已经通过三种方式面对了这个问题。尽管对于每个问题,答案中都可以找到解决方案,但我只是想将它们放在一起。

  1. 首先,在导入某些模块时出现了“未解决的导入”,我注意到我的安装是在全局点而不是虚拟环境中进行的。

    这个问题是由于Python解释器。您需要使用Shift+ Ctrl+在Visual Studio Code中选择解释器P,然后键入Select Python Interpreter。在这里选择您的venv口译员。

  2. 第二个问题是:上述更改没有完全解决我的问题。这次是因为文件settings.json。如果项目目录中没有settings.json文件,请创建一个文件并在其中添加以下行:

        {
            "python.pythonPath": "apis/bin/python"
        }
    

    基本上,这将告诉Visual Studio Code使用venv中的Python解释器。

  3. 第三个问题是在另一个程序中导入自定义Python模块或文件时。为此,您需要了解文件夹结构。由于venv中的Python位于bin中,因此您需要指定模块的文件夹(大多数情况下是应用程序文件夹)。就我而言app

        from app.models import setup_db
    

    严格来说,从models.py导入setup_db驻留在app文件夹中。


0

我在使用venv的python 3.8.5中遇到了相同的问题,vscode 1.48.2我找到了解决方案。在(环境文件夹)/ lib / site-packages中不包含软件包。我使用此设置(.vscode / settings.json)

   {
        "python.autoComplete.extraPaths": [
            "./**",
        ],
        "python.pythonPath": "env\\Scripts\\python.exe",
        "python.languageServer": "Microsoft"
   }
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.