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

Posted

技术标签:

【中文标题】Visual Studio Code 中的 Pylint“未解决的导入”错误【英文标题】:Pylint "unresolved import" error in Visual Studio Code 【发布时间】:2019-05-25 04:05:38 【问题描述】:

我正在使用以下设置

macOS v10.14(莫哈韦沙漠) Python 3.7.1 Visual Studio 代码 1.30 Pylint 2.2.2 Django 2.1.4

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

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

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

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

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

有没有快速解决办法让它工作?

【问题讨论】:

pip install pylint-django,然后在 vs 代码设置中添加:"python.linting.pylintArgs": [ "--load-plugins=pylint_django", ], @VaibhavVishal 不幸的是,我仍然得到相同的结果(将其添加到我的 settings.json 文件中) 其实是VScode问题,很晚才检测到导入包,重启后自动修复。 @VaibhavVishal 这是整个线程中唯一对我有用的解决方案。谢谢。 我的 pythonPath 已经正确设置为 venv python。如果这对任何人都有帮助,我实际上必须在我的 venv 中安装 pylint:python -m pip install pylint,然后将 VS Code 中的 pylintPath 更新为 venv pylint。 【参考方案1】:

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


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

【讨论】:

这类作品。对于 Python 特定的导入,它现在解决了那些但不是我自己的模型(即“从 users.models 导入用户”仍然说它无法解决它)。对此有什么想法? 不确定。请尝试重新加载 vs 代码的窗口(从 shell,code <project_directory> -r)或重新启动 vscode。 我不确定,如果workspace directory设置不正确,有时可能会发生。请确保manage.pyworkspace 的根目录中。另外请确保pylint is configured properly 你这个天才!这是因为我的工作区不是从项目的根级别开始的。一旦我调整它开始工作。非常感谢! 非常感谢!帮助我解决了一个古老的问题!【参考方案2】:

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


    "python.jediEnabled": false

【讨论】:

最好加一点解释。 编辑这一行对你的项目来说是一个很大的改变。 Line: "python.jediEnabled": false 禁用旧语言服务器并启用新的 Microsoft Python 语言服务器。看这里:github.com/Microsoft/vscode-python/issues/2177 我认为向我们的 envFile 添加必要的依赖项要简单得多。它在另一个答案中有所描述。有了新的 Microsoft Python 语言服务器,智能感知对我来说效果更好。 对我来说是相反的,在 settings.json 中启用绝地对我有用。在此处查看更多信息,***.com/a/57269144/2877493 @Tiw 尤其是因为另一个答案表明恰恰相反。【参考方案3】:

这个 issue 已经在 GitHub 上打开了:

Python unresolved import issue #3840

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

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

PYTHONPATH=YOUR/MODULES/PATH

然后在你的 settings.json 中添加:

"python.envFile": ".env"

【讨论】:

谢谢,效果很好! "$workspaceFolder/.env"PYTHONPATH=FolderName 在使用 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 解释器。 vscode中的项目根文件夹表示workspace.code-workspace在哪里,所有repos都是子目录?模块路径是site-packages的路径?【参考方案4】:

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

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

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

【讨论】:

【参考方案5】:

当我执行> reload window 时,它会修复它。

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

【讨论】:

如果我点击文件,它只是隐藏警告,它再次显示! “>”是文字还是提示的一部分?【参考方案6】:

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

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

【讨论】:

在我的情况下这不起作用,但希望它可以帮助其他人解决这个问题。 是的,这就是精神,这不是一个复杂的解决方案,这就是发生在我身上的事情:) 这对我有用。以防有人在 2019 年仍然想知道。 @Safder 不适合我。使用 virtualenv 这对我有用。因为我有一个目录结构,其中每个 python 项目我都有一个新的venv,因此我将它指向该项目的venv 目录中的特定 Python【参考方案7】:

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

"python.jediEnabled": true

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

【讨论】:

我从一开始就启用了。幸运你 在 VSC python 扩展的 v2020.8.10 上获取未知配置 python 3.8【参考方案8】:

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

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

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

参考:Troubleshooting, Unresolved import warnings

【讨论】:

我有一个混合工作区,所有 python 代码都在一个子文件夹中。在子文件夹中添加 .vscode 将不起作用,这是唯一可行的解​​决方案。 vscode settings.json 的最佳答案。 (如果使用workspace.xml,接受的答案可能是要走的路,但不能肯定地说。我也在使用混合工作区)非常感谢您的解决方案。 这应该是答案。 这对我有用!参考链接解释得很好。 TL;博士;对于用户在子目录中创建的本地脚本,上述设置有助于 python 解释器将子目录识别为自己的工作区。随后,识别工作区中的脚本并在导入整个模块或单个方法时解析导入。 大家好!我发现 ["./path-to-your-code"] 可以是 ["./**"] 在任何情况下双星表示根目录下的任何子文件夹!这是一个更简单的解决方案。【参考方案9】:

以前的答案都不适合我。但是,将以下两行添加到我的 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 的人可以再解释一下。

【讨论】:

很高兴人们发现这很有用,但是有没有人可以解释第二个键值对?【参考方案10】:

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

pipenv install pylint-django

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

load-plugins=pylint-django

【讨论】:

【参考方案11】:

这对我有用:

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

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

【讨论】:

就我而言。我的 python 2 解释器工作正常。只是我的python 3不能很好地配合 这个答案解决了我的问题。谢谢【参考方案12】:

我的解决方案

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

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

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

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

    
        "python.pythonPath": "/usr/local/bin/python3",
    
    

    这是 Python 2 的示例

    
        "python.pythonPath": "/usr/local/bin/python",
    
    

    如果您不知道 Python 安装的位置,只需在终端上运行命令 which pythonwhich python3。它将打印 Python 位置。

    此示例适用于 dockerized Python - Django。

【讨论】:

【参考方案13】:

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

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

所以 JSON 内容应该如下所示:


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

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

【讨论】:

【参考方案14】:

The solution from Shinebayar G 有效,但另一个更优雅一点:

复制自Python unresolved import issue #3840

给定以下示例项目结构:

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

我做了什么来解决这个问题:

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

【讨论】:

【参考方案15】:

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

【讨论】:

“上一个目录”是什么意思?你的意思是“父目录”吗?还是别的什么? 我只在项目前的一个目录中用控制台打开VSCode【参考方案16】:

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

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

【讨论】:

【参考方案17】:

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

分析:禁用部分,添加对以下消息的抑制:unresolved-import:

【讨论】:

相对导入的 unresolved-import 显然是不正确的,这就去掉它。 这只会修复警告,而不是解决问题。如果我使用 python 路径方法,那么导入警告就会消失,并且“钻入”(“goto 定义”)和“参数提示”也可以工作。【参考方案18】:

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

原始文件夹结构:

    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。

【讨论】:

【参考方案19】:

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

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

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

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

【讨论】:

这正是我的问题(在 Mac 上),选择合适的解释器解决了它。谢谢! 这是我的问题。 Julia 显然为 ~\.julia\conda\3\python.exe 安装了自己的 Python 解释器。【参考方案20】:

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

该库是 jsonslicer,它依赖于我安装到 /usr/local/lib 中的外部 C 库。会不会跟这有关系?

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

【讨论】:

【参考方案21】:

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


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

【讨论】:

"check Pylint" 是什么意思?一个复选框?它存在/已安装?还有什么?由editing your answer 回复,而不是在 cmets 中(以及没有“编辑:”、“更新:”或类似的)。【参考方案22】:

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

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

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

【讨论】:

什么是“代码运行者”?您可以添加对它的引用(editing your answer,不在 cmets 中)吗?【参考方案23】:

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

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

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

键入Python 解释器

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

【讨论】:

【参考方案24】:

我以三种方式面对这个问题。尽管对于每个人来说,这个问题的答案都提供了一个解决方案,但我只是想把它们放在一起。

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

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

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

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

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

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

        from app.models import setup_db
    

    实际上,import setup_db from models.py 位于 app 文件夹中。

【讨论】:

【参考方案25】:

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

"python.languageServer": "Jedi"

【讨论】:

【参考方案26】:

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


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

这会有所帮助。

【讨论】:

【参考方案27】:

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

"python.languageServer": "Jedi"

【讨论】:

同意。我也尝试了提供的所有选项,但这有效!【参考方案28】:

我在 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"
   

【讨论】:

【参考方案29】:

改变 Python:语言服务器 “绝地”对我有用。 最初是“Windows”。

【讨论】:

【参考方案30】:

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

旧文件夹结构:

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

新结构:

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

【讨论】:

以上是关于Visual Studio Code 中的 Pylint“未解决的导入”错误的主要内容,如果未能解决你的问题,请参考以下文章

折叠 Visual Studio Code 中的所有方法 [重复]

Visual Studio Code 中的重复行

Visual Studio Code 中的高亮问题

Visual Studio Code 中的 Python 版本问题

如何从 Visual Studio Code 中的集成终端打开文件?

Visual Studio Code 中的远程调试