繁体   English   中英

Visual Studio Code 中的 Pylint“未解决的导入”错误

[英]Pylint "unresolved import" error in Visual Studio Code

我正在使用以下设置

  • macOS v10.14 (莫哈韦沙漠)
  • Python 3.7.1
  • 视觉工作室代码 1.30
  • 皮林特 2.2.2
  • Django 2.1.4

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

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

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

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

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

有没有快速修复让它工作?

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

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

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

参考: 疑难解答,未解决的导入警告

在您的工作区设置中,您可以像这样设置 Python 路径:

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

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

Cmd / Ctrl + Shift + PPython:选择解释器→ 选择包含您要查找的包的那个:

在此处输入图像描述

此问题已在 GitHub 上打开:

Python 未解决的导入问题 #3840

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

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

PYTHONPATH=YOUR/MODULES/PATH

在你的 settings.json 添加:

"python.envFile": ".env"

当我这样做时> reload window

参考: Python 未解决的导入问题 #3840, dkavraal的评论

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

"python.languageServer": "Jedi"

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

{
    "python.jediEnabled": false
}

如果您像我一样更直观,可以使用菜单FilePreferencesSettings ( Ctrl + , ) 中的 Visual Studio Code 配置。 转到扩展Python

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

Visual Studio 代码设置

我能够通过在 .vscode\settings.json 中启用绝地来解决这个问题

"python.jediEnabled": true

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

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

在此处输入图像描述

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

在此处输入图像描述

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

有时,即使选择了解释器,它也不起作用。 只需再次重复该过程,它应该可以解决它。

在此处输入图像描述

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

"python.languageServer": "Jedi"

以前的答案都不适合我。 但是,将以下两行添加到我的settings.json文件中。

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

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

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

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

我的解决方案

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

  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。

好的,所以两年后我遇到了这个烦人的问题。 我在这里看到的只是一些非常复杂的解决方法。 对于以后可能遇到此问题的其他人,以下是易于遵循的步骤:

  • 在 VS Code 的底部,您会看到列出的 Python 版本,只需单击那里
  • 选择解释器窗口将出现
  • 单击显示“选择解释器路径”的第一个选项并导航到包含您的虚拟环境的文件夹路径

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

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

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

给定以下示例项目结构:

  • 工作区根文件夹
    • .vscode
  • ... 其他文件夹
  • 代码文件夹

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

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

对我来说,这个问题与我正在从事的项目有关。 我花了一段时间才弄清楚,所以我希望这会有所帮助:

原始文件夹结构:

    root/
    __init__.py  # Empty

        folder/
            __init__.py # Empty

            sub_folder_b/
                my_code.py
            sub_folder_c/
                another_code.py

在另一个_code.py 中:

from folder.sub_folder_b import my_code.py

这并没有触发 Visual Studio Code 中的智能感知,但它执行正常。

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

from root.folder.sub_folder_b import my_code.py

解决方案是删除“文件夹”目录中的_init _.py 文件,只留下位于/root_init _.py 文件。

这对我有用:

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

这样做,您在 Visual Studio Code 中设置 Python 解释器。

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

目录结构:

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]

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

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

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

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

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

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

键入Python 解释器

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

将 Python:Language Server 更改为“Jedi”对我有用。 最初是“Windows”。

对我来说,如果我将 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。 完毕!

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

  • 马科斯大苏尔
  • 代码
  • Anaconda 3(用于环境)

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

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

  1. 打开设置(工作区)

  2. 按照此屏幕截图打开 Python 路径按照此步骤进行第 2 步

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

  4. 制作此屏幕截图中给出的路径/opt/anaconda3/bin/python 在此处输入图像描述

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

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

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

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

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

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

pipenv install pylint-django

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

load-plugins=pylint-django

我从三个方面面对这个问题。 尽管对于他们每个人来说,这个问题的答案都有一个解决方案,但我只是想把它们放在一起。

  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 使用 venv 中的 Python 解释器。

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

     from app.models import setup_db

    口头上,从 models.py 导入 setup_db 位于app文件夹中。

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

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

这可以提供帮助。

如果有人碰巧像我一样愚蠢,那么下面的工作就奏效了。

旧文件夹结构:

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

新结构:

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

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 警告。

在此处输入图像描述

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

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

因此 JSON 内容应如下所示:

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

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

我的解决方案是在以前的目录中打开 Visual Studio Code。

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

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

我有一个库在尝试使用 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",

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

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

省得自己头疼……

并使用标准的 Python 项目结构

打包 Python 项目的官方 Python 文档推荐以下项目结构:

packaging_tutorial/
├── LICENSE
├── pyproject.toml
├── README.md
├── setup.cfg
├── src/
│   └── example_package/
│       ├── __init__.py
│       ├── example.py
│       └── more_code.py
└── tests/

VS Code Pylance 默认配置为识别此结构。 关键思想是确保在项目根目录的正下方有一个src文件夹,然后是紧挨在下面的顶级包(在本例中example_package )。

然后在您的 Python 源文件中,导入语句如下所示:

more_code.py

from example_package.example import example_function

...

我遇到的问题是找不到我创建的模块的导入。 我觉得我尝试了多种方法来确保 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“无法导入”错误中找到 - 如何设置 PYTHONPATH? . 我没有创建和编辑 pylintrc,而是使用 VS Code GUI 添加了上述内容。

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

修复我只是

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

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

错误应该消失并且自动完成应该可以工作。

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

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

我用命令行python解决了这个问题。 我在项目路径中安装了带有 vs code 终端的模块,但是当在 windows 命令行 python 上导入模块时,由于该模块未定义而引发错误,因此我从命令行安装这些模块并解决了我的问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM