Visual Studio 代码中的 Pylint "unresolved import" 错误

Pylint "unresolved import" error in Visual Studio Code

我正在使用以下设置

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

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

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

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

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

是否有快速解决方法使其正常工作?

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

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

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

{
    "python.jediEnabled": false
}

此问题已在 GitHub 上打开:

Python unresolved import issue #3840

MagnuesBrzenk 和 SpenHouet 提供了两个非常有用的答案。

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

PYTHONPATH=YOUR/MODULES/PATH

并在您的 settings.json 中添加:

"python.envFile": ".env"

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

我将其更改为使用 .venv/bin/python,并且我的所有导入都已正确解析。

我不知道 Visual Studio 当我这样做时代码在幕后做了什么,我也不明白为什么这会导致我的问题,但对我来说这是一个比编辑我的代码更简单的解决方案工作区设置。

当我 > reload window 修复它时。

参考:Python unresolved import issue #3840, dkavraal's comment

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

Cmd/Ctrl + Shift + PPython: Select Interpreter → 选择你要找的包:

我能够通过在 .vscode\settings.json

中启用 jedi 来解决这个问题
"python.jediEnabled": true

引用自https://github.com/Microsoft/vscode-python/issues/3840#issuecomment-456017675

接受的答案不会修复导入自己的模块时的错误。

在您的工作区设置中使用以下设置 .vscode/settings.json

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

参考:Troubleshooting, Unresolved import warnings

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

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

第一行实际上只是隐藏了 linting 错误。当然不是永久性的解决方案,但可以消除屏幕上的混乱。

这个答案给了我第二行:

也许比我更懂 Python 的人可以再解释一下。

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

pipenv install pylint-django

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

load-plugins=pylint-django

这对我有用:

打开命令面板(Ctrl + Shift + P)并选择“Python: Select 口译员".

执行此操作,您在 Visual Studio 代码中设置 Python 解释器。

我的解决方案

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

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

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

  3. 在文件 setting.json 中,添加行(这是用于 Python 3)

    {
        "python.pythonPath": "/usr/local/bin/python3",
    }
    
  4. 这是 Python2

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

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

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

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

因此 JSON 内容应如下所示:

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

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

有效,但另一个更优雅:

复制自Python unresolved import issue #3840:

给定以下示例项目结构:

  • workspaceRootFolder
    • .vscode
  • ...其他文件夹
  • 代码文件夹

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

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

我的解决方案是打开上一个目录中的 Visual Studio 代码。

在我的例子中,我已经激活了一个 Conda 环境,但我仍然希望本地 Python 模块可用于自动完成、查看定义等。

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

如果你像我一样比较视觉化,可以使用菜单文件中的Visual Studio代码配置→首选项设置 (Ctrl + ,)。转到 扩展程序Python.

Analysis: Disabled 部分中,添加对以下消息的抑制:unresolved-import:

对我来说,问题与我正在进行的项目有关。我花了一段时间才弄明白,所以我希望这对你有所帮助:

原始文件夹结构:

    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 代码中的智能感知,但确实执行正常。

另一方面,在导入路径中添加“root”确实使智能感知工作,但在执行时引发了 ModuleNotFoundError:

from root.folder.sub_folder_b import my_code.py

解决方法是把“folder”目录下的_init_.py文件去掉,只留下_init_.py 位于 /root.

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

点击这里(底部状态栏):

并且只是 select 您正在使用的虚拟环境。完成。

有时,即使使用解释器 selected,也无法正常工作。再重复一遍这个过程应该就可以解决了。

我有一个库在尝试使用 Jedi 语言服务包含它时出错,但没有它也能正常工作(即 C# 库)。

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

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

首先确保你已经安装了插件,但可能是工作区目录设置不正确。只需检查 Pylint 并编辑底层 settings.json 文件。

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

安装 code-runner 并在 settings.json 文件夹中添加以下代码:

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

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

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

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

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

类型Python解释器

Select 您在可用选项中安装 Python 的路径。

我曾以三种方式面对过这个问题。虽然在这个问题的答案中每个人都有一个解决方案,但我只是想把它们放在一起。

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

    这个问题是因为 Python 解释器。您需要 select Visual Studio 代码中的解释器使用 Shift + Ctrl + P 然后键入 Select Python Interpreter。 Select 你的 venv 口译员在这里。

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

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

    这基本上会告诉 Visual Studio 使用您的 venv 中的 Python 解释器的代码。

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

        from app.models import setup_db
    

    口头上,import setup_db from models.py 驻留在 app 文件夹中。

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

"python.languageServer": "Jedi"

如果您使用的是 pipenv,那么您需要指定虚拟 environment.in settings.json 文件的路径。 例如:

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

这会有所帮助。

None 个解决方案有效,但这个除外。在 settings.json 中替换“Pylance”或“Microsoft”解决了我的问题。

"python.languageServer": "Jedi"

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

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

改变 Python:Language 服务器 'Jedi' 对我有用。 最初是 'Windows'。

如果有人碰巧像我一样白痴,下面的方法就奏效了。

旧文件夹结构:

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

新结构:

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

我用 command-line python 解决了这个问题。 我在项目路径中安装了带有 vs 代码终端的模块,但是当在 windows 命令行 python 上导入模块时,会抛出错误,因为此模块未定义 所以我从命令行安装了这些模块,我的问题就解决了。

对我来说,它有效,如果我将 python、pylint 和 autopep8 的路径设置为本地环境路径。

对于你的工作区add/change这个:

"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 with workspace。 完成!

How to avoid warning

请注意,这只是跳过警告并没有解决它。 首先在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"]

这帮助我避免了 VSCode 中的 pylint 警告。

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

目录结构:

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”中添加以下“要附加的代码”

文件名:

.vscode/settings.json

要附加的代码:

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

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

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

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

康达环境

pylint error: "Unable to import 'django.X'"

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

/home/<username>/anaconda3/bin/pylint

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

$ conda activate <target environment>
$ conda install pylint

2。更新 VS 代码设置

  • 在 VS Code 设置 中,搜索“pylint 路径”
  • 单击 Workspace 选项卡(而不是默认的 User
  • 在“扩展程序 (##)”下,单击“Python (#)”
  • 向下滚动到 Python > Linting:Pylint 路径
  • 输入指向刚刚安装的pylint副本的pylint路径,例如:

/home/<username>/anaconda3/envs/<target environment>/bin/pylint

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

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

3。安装 Django pylint 插件

$ conda install pylint-django

更新 VS 代码设置以使用插件:

  • 搜索“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

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

  • macOS 大苏尔
  • vscode
  • Anaconda 3(针对环境)

我在启动 Django 时遇到了这个错误。 所以,我按照这些步骤操作并解决了这个错误。

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

  1. 打开设置(工作区)

  2. 按照这个截图打开Python路径

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

  4. 按照此屏幕截图中给出的路径创建路径 /opt/anaconda3/bin/python

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

此外,intellisense 可能会在一段时间内无法工作,请等待一段时间,然后重新启动,然后 vscode 读取新路径的文件。

我遇到了我创建的模块导入找不到的问题。我觉得我尝试了很多方法来确保 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 添加了上面的内容。

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

修复我只是

  1. 打开 Anaconda Navigator
  2. 单击左侧菜单中的环境
  3. Select您为项目使用的虚拟环境
  4. 在虚拟环境中,单击绿色三角形(加载后),然后 select 'Open Terminal'
  5. 运行 'pip install django'

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

错误应该会消失,自动完成应该会起作用。

好的,2 年后我 运行 遇到了这个烦人的问题。我在这里看到的只是一些非常复杂的解决方法。对于以后可能 运行 参与此操作的其他人来说,以下是简单易行的步骤:

  • 在 VS Code 的底部,您会看到列出的 Python 版本,只需单击此处
  • Select翻译windows即将出场
  • 点击第一个选项“Select Interpreter Path”并导航到包含您的虚拟环境
  • 的文件夹路径

这就是您需要做的所有事情,并避免在 VS Code 中调整这些设置,如果不小心处理,这些设置可能会变得非常复杂。

在子目录中导入模块,在.vscode/settings.json中添加如下设置:

"python.analysis.extraPaths": [
        "./directory_name"
    ]