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

时间:2018-12-27 04:27:51

标签: python django visual-studio-code pylint

我正在使用以下设置

  • MacOS Mojave
  • Python 3.7.1
  • Visual Studio代码1.30
  • Pylint 2.2.2
  • Django 2.1.4

我想让我们在Visual Studio代码中使我的生活更轻松一些,但是,每次导入我都声明“未解决的导入”。即使是默认的django导入(即从django.db导入模型)。

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

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

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

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

有人遇到过这个问题,并且知道快速解决问题的方法吗?

谢谢, jAC

38 个答案:

答案 0 :(得分:35)

在导入自己的模块时,可接受的答案无法解决错误。 在工作空间设置.vscode/settings.json

中使用以下设置
"python.autoComplete.extraPaths": ["./path-to-your-code"],

ref:https://github.com/microsoft/python-language-server/blob/master/TROUBLESHOOTING.md#unresolved-import-warnings

答案 1 :(得分:16)

在您的workspace settings中,您可以这样设置python路径:

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

答案 2 :(得分:16)

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

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

Visual Studio Code settings

答案 3 :(得分:9)

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

Enter image description here

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

Enter image description here

,然后选择要使用的虚拟环境。完成。

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

Enter image description here

答案 4 :(得分:8)

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

{    
    "python.jediEnabled": false
}

答案 5 :(得分:8)

除此解决方案外,其他解决方案均无效。替换settings.json中的“ Pylance”或“ Microsoft”即可解决我的问题。

"python.languageServer": "Jedi"

答案 6 :(得分:7)

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

"python.languageServer": "Jedi"

答案 7 :(得分:7)

我能够通过在.vscode \ settings.json中启用jedi来解决此问题

"python.jediEnabled": true

来自https://github.com/Microsoft/vscode-python/issues/3840#issuecomment-456017675的参考

答案 8 :(得分: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文件,仅保留位于{{1}的_ init _。py }。

答案 9 :(得分:3)

替代方法:使用命令界面!

cmd/ctrl + shift + p> Python: Select Interpreter>选择要查找的软件包之一

enter image description here

答案 10 :(得分:3)

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

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

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

这个答案给了我第二行:VS Code PyLint Error E0602 (undefined variable) with ProtoBuf compiled Python Structure

也许有人比我更了解python了。

答案 11 :(得分:3)

我在导入与项目相关的(非标准)模块时遇到了同样的问题。 问题详细说明

目录结构:

Project_dir:
    .vscode/settings.json
    dir_1
        > a
        > b
        > c
    dir_2
        > x
        > y
        > z

我们想要的:

Project_dir
    dir_3
        import a
        import y

此处“import a”和“import y失败并出现以下错误:

Import "dir_1.a" could not be resolvedPylancereportMissingImports
Import "dir_2.y" could not be resolvedPylancereportMissingImports

什么对我有用:

附加包含要导入的模块的顶级目录。

在上面的例子中,在“.vscode/settings.json”中添加以下“Code to append”

文件名:

.vscode/settings.json

要附加的代码:

"python.analysis.extraPaths": [dir_1, dir_2]

答案 12 :(得分:3)

这里的答案都没有为我解决这个错误。代码会运行,但我无法直接跳转到函数定义。它仅适用于某些本地包。一方面,python.jediEnabled 不再是一个有效的选项。我做了两件事,但我不确定第一件事是否必要:

  1. 下载 Pylance 扩展,将 python.languageServer 更改为“Pylance”
  2. 添加"python.analysis.extraPaths": [ "path_to/src_file" ]

显然会检查 root 和 src 是否有本地包,但必须在此处添加其他包。

答案 13 :(得分:2)

改变 Python:语言服务器 “杰迪”为我工作。 最初是“ Windows”。

答案 14 :(得分:2)

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

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

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

类型 Python解释器

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

答案 15 :(得分:2)

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

https://github.com/Microsoft/vscode-python/issues/3840#issuecomment-463789294复制:

给出以下示例项目结构:

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

我为解决此问题所做的事情:

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

答案 16 :(得分:1)

我正在使用以下设置:(2021 年 4 月)

  • macos big sur
  • vscode
  • Anaconda 3(用于环境)

我在 Django 启动期间遇到了这个错误。 因此,我按照以下步骤操作,此错误已解决。

这些屏幕截图中给出了步骤:

  1. 打开设置(工作区)

  2. 按照这个截图打开 Python Path Follow this for Step 2

  3. 现在,点击 Edit in settings.json

  4. 使路径如此屏幕截图所示/opt/anaconda3/bin/python enter image description here

5.现在,保存这个 settings.json 文件。 6.重启vscode

另外,intellisense 可能会在一段时间内不起作用,等待一段时间然后再次重启,然后 vscode 读取新路径的文件。

答案 17 :(得分: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。 完成!

答案 18 :(得分:1)

这对我有用:

打开命令选项板(Ctrl-Shift-P)并选择“ Python:选择解释器”。 为此,您可以在VSCode中设置Python解释器

答案 19 :(得分:1)

答案 20 :(得分:1)

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

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

这会有所帮助。

答案 21 :(得分:1)

我有一个不同的解决方案:我的VSCode实例选择了存储在C0中的virtualenv,但是使用了错误的Python二进制文件。它正在使用df['C0','ch01','fb1'] = df.loc(axis=1)[pd.IndexSlice['C0','ch01',['f1','f2','f3'],:]].mean(axis=1) ;使用蓝色状态栏中的切换器,我将其更改为使用[tablename]![recieved_date] < DateSerial(Year(Date()), Month(Date()) - 1, 1) ,所有导入均已正确解决。我不知道在执行此操作时VSCode在幕后做什么,也不知道为什么这会导致我的问题,但是对我来说,这是比编辑工作区设置稍微简单的解决方案。希望对您有所帮助。

答案 22 :(得分:0)

Conda 环境

<块引用>

pylint 错误:“无法导入 'django.X'”

在您的 conda 环境中激活所需的 Python 解释器后,VS Code 有时会继续使用默认 conda 环境中的 pylint。例如:

<块引用>

/home//anaconda3/bin/pylint

1.在目标 conda 环境中安装 pylint

$ conda activate <target environment>
$ conda install pylint

2.更新 VS Code 设置

  • 在 VS Code 设置中,搜索“pylint路径”
  • 点击工作区标签(而不是默认的用户
  • 在“扩展 (##)”下,点击“Python (#)”
  • 向下滚动到 Python > Linting:Pylint 路径
  • 输入指向刚刚安装的pylint副本的pylint路径,例如:
<块引用>

/home//anaconda3/envs/<目标环境>/bin/pylint

根据您的系统配置替换 <username><target environment>

现在pylint会找到已安装的库,包括Django,假设Django已经安装在<目标环境>中。

3.安装 Django pylint 插件

$ conda install pylint-django

更新 VS Code 设置以使用插件:

  • 搜索“pylint args”的 VS Code 设置
  • Python > Linting: Pylint Args 下,点击“添加项目”
  • 输入:--load-plugins=pylint_django
  • 点击“确定”
  • 点击“添加项目”
  • 输入:--django-settings-module=<PROJECT FOLDER>.settings
    • <PROJECT FOLDER> 替换为包含“settings.py”Django 配置文件的文件夹。
  • 点击“确定”
  • 重启 VS Code

答案 23 :(得分:0)

我遇到的问题是找不到我创建的模块的导入。我觉得我尝试了多种方法来确保 python 解释器选择正确,但无济于事。我通过编辑 settings.json Python>Linting>Pylint Args 并添加 init-hook 找到了一个对我有用的答案...

--init-hook="from pylint.config import find_pylintrc; import os, sys; sys.path.append(os.path.dirname(find_pylintrc()))"

此解决方案在 PyLint "Unable to import" error - how to set PYTHONPATH? 中找到。我没有创建和编辑 pylintrc,而是使用 VS Code GUI 添加了上述内容。

答案 24 :(得分:0)

Resolved

首先在json中打开Visual Studio代码设置,然后在"[python]":{}之后添加以下参数

"python.linting.pylintArgs": ["--rep[![enter image description here][1]][1]orts", "12", "--disable", "I0011"],
"python.linting.flake8Args": ["--ignore=E24,W504", "--verbose"]
"python.linting.pydocstyleArgs": ["--ignore=D400", "--ignore=D4"]

这解决了我关于pylint的问题

答案 25 :(得分:0)

如果有人碰巧和我一样谐趣,那么以下方法就可以了。

旧文件夹结构:

awesome_code.py
__init__.py
    src/
        __init__.py
        stuff1.py
        stuff2.py

新结构:

awesome_code.py
    src/
        __init__.py
        stuff1.py
        stuff2.py

答案 26 :(得分:0)

我似乎遇到了这个问题,因为 django 安装在我的基本虚拟环境中,而不是我实际用于项目的那个。这基本上导致它工作,但显示错误并且不能正确自动完成。

为了修复我很简单

  1. 打开 Anaconda 导航器
  2. 点击左侧菜单中的环境
  3. 选择您用于项目的虚拟环境
  4. 在虚拟环境中,点击绿色三角形(加载后)并选择“打开终端”
  5. 运行“pip install django”

完成此操作后,您可以返回 VS Code 并将 python 环境切换到基础,然后返回到 VS Code 左下角的您想要的环境。

错误应该消失并且自动完成应该起作用。

答案 27 :(得分:0)

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

   {
        "python.autoComplete.extraPaths": [
            "./**",
        ],
        "python.pythonPath": "env\\Scripts\\python.exe",
        "python.languageServer": "Microsoft"
   }

答案 28 :(得分:0)

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

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

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

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

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

    这基本上会告诉Visual Studio Code使用您的虚拟设备中的Python解释器。

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

        from app.models import setup_db
    

    从字面上看,从models.py导入setup_db位于 app 文件夹中。

答案 29 :(得分:0)

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

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

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

答案 30 :(得分:0)

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

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

答案 31 :(得分:0)

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

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

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

答案 32 :(得分:0)

就我而言,我已经激活了一个conda环境,但是仍然希望本地python模块可用于自动完成,偷看定义等。我尝试了许多解决方案,例如添加python路径列表等。但是最终解决了什么问题我是要创建一个从conda lib/python{your version}/site-packages到本地模块的符号链接。

答案 33 :(得分:0)

我的解决方案是在上一个目录中打开vscode。

答案 34 :(得分:0)

我已通过CTRL+Shift+P解决了导入错误 键入首选项设置,然后选择选项Preferences Open Settings (JSON) 并添加一行"python.pythonPath": "/usr/bin/" 所以JSON应该看起来像

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

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

答案 35 :(得分:0)

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

  1. 在项目根目录中创建文件夹.vscode
  2. 然后创建文件.vscode/settings.json
  3. 在文件setting.json中添加以下行(这适用于python3)
{
    "python.pythonPath": "/usr/local/bin/python3",
}
  1. 这是python 2的示例
{
    "python.pythonPath": "/usr/local/bin/python",
}
  1. 如果您不知道python的位置,则只需在终端上运行命令which pythonwhich python3即可打印python的位置。

  2. 此示例适用于dockerized Python-Django。

答案 36 :(得分:0)

万一出现pylint错误,请安装以下内容

pipenv install pylint-django

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

load-plugins=pylint-django

答案 37 :(得分:-1)

我使用命令行python解决了该问题。 我在项目路径中使用vs代码终端安装了模块,但是在Windows命令行python上导入模块时,由于未定义此模块,因此会引发错误 所以我从命令行安装了这些模块,问题解决了。