ChatGPT解决这个技术问题 Extra ChatGPT

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

我正在使用以下设置

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 设置中进行设置,但它也没有显示出来。

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

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

S
Shinebayar G

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

在您的工作区设置 .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"] 可以是 ["./**"] 在任何情况下双星表示根目录下的任何子文件夹!这是一个更简单的解决方案。
b
bragboy

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

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

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

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

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

https://i.stack.imgur.com/XQEku.gif


就我而言,这不起作用,但希望它可以帮助其他人解决这个问题。
是的,这就是精神,这不是一个复杂的解决方案,这就是发生在我身上的事情:)
@Safder 不适合我。使用虚拟环境
这对我有用。因为我有一个目录结构,其中每个 python 项目都有一个新的 venv,因此我将它指向该项目的 venv 目录中的特定 Python
2022 年为我工作 - 我在项目中使用 venv,所以我将解释器路径设置为 ./bin/python
P
Peter Mortensen

此问题已在 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 的路径吗?
P
Peter Mortensen

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

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


如果我单击文件,它只会隐藏警告,它会再次出现!
">" 是文字还是提示的一部分?
h
hexr

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

"python.languageServer": "Jedi"

同意。我也尝试了提供的所有选项,但这有效!
P
Peter Mortensen

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

{
    "python.jediEnabled": false
}

最好加一点解释。
编辑这一行对您的项目来说是一个很大的变化。 Line: "python.jediEnabled": false 禁用旧语言服务器并启用新的 Microsoft Python 语言服务器。看这里:github.com/Microsoft/vscode-python/issues/2177 我认为向我们的 envFile 添加必要的依赖项要简单得多。它在另一个答案中有所描述。使用新的 Microsoft Python 语言服务器,智能感知对我来说效果更好。
对我来说,相反,在 settings.json 中启用绝地对我有用。在此处查看更多信息,stackoverflow.com/a/57269144/2877493
@Tiw 特别是因为另一个答案提出了相反的建议。
P
Peter Mortensen

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

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

https://i.stack.imgur.com/WGGx5.png


相对导入的 unresolved-import 显然是不正确的,这就摆脱了它。
这只会修复警告,而不是解决问题。如果我使用 python 路径方法,那么导入警告就会消失,并且“钻入”(“goto 定义”)和“参数提示”也会起作用。
n
nairb

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

"python.jediEnabled": true

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


我从一开始就启用了。幸运的你
在 VSC python 扩展的 v2020.8.10 上获取未知配置 python 3.8
P
Peter Mortensen

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

https://i.stack.imgur.com/udg9m.png

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

https://i.stack.imgur.com/7nhIB.png

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

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

https://i.stack.imgur.com/tqnpg.png


这正是我的问题(在 Mac 上),选择合适的解释器解决了它。谢谢!
这是我的问题。 Julia 显然为 ~\.julia\conda\3\python.exe 安装了自己的 Python 解释器。
G
Georges D

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

"python.languageServer": "Jedi"

P
Peter Mortensen

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


很高兴人们发现这很有用,但是有没有人可以解释第二个键值对?
P
Peter Mortensen

我的解决方案

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

在项目根目录中,创建文件夹 .vscode 然后创建文件 .vscode/settings.json 在文件 setting.json 中,添加行(这是针对 Python 3) { "python.pythonPath": "/usr/local/bin /python3", } 这是 Python 2 的示例 { "python.pythonPath": "/usr/local/bin/python", } 如果你不知道你的 Python 安装在哪里,只需运行命令 which python或终端上的哪个python3。它将打印 Python 位置。此示例适用于 dockerized Python - Django。


S
Surveyor Jr

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

在 VS Code 的底部,您会看到列出的 Python 版本,只需单击那里

选择解释器窗口将出现

单击显示“选择解释器路径”的第一个选项,然后导航到包含您的虚拟环境的文件夹路径

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


谢谢Surveyor Jr。这在当时实际上对我不起作用。所以也许有改进。感谢您将此解决方法添加到线程!
这对我也不起作用
@JamieMarshall 我想它现在取决于操作系统。我是 Windows 用户。 #假设。但希望你现在找到了答案。
@SurveyorJr - 我也是窗户。对我来说,我不得不卸载并重新安装 pylint。
P
Peter Mortensen

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

复制自 Python unresolved import issue #3840

给定以下示例项目结构:

工作区根文件夹 .vscode

.vscode

... 其他文件夹

代码文件夹

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

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


N
NicoE

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

原始文件夹结构:

    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。


P
Peter Mortensen

这对我有用:

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

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


就我而言。我的 python 2 解释器工作正常。只是我的python 3不能很好地配合
这个答案解决了我的问题。谢谢
T
TheLearner

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

目录结构:

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]

这就是最终为我工作的原因。我的项目包含嵌套在外部 package_name 文件夹中的 package_name 文件夹中的代码。仅将 package_name 添加到“extraPaths”(不是绝对路径)就可以了。
为我工作,但我不得不将目录名称放在引号中。
c
chuck_d

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

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

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


安装 Pylance 扩展程序立即为我修复了它
我已经安装了 pylance,但对于某些项目,我仍然面临这个问题。 extraPaths 是否应该指向一条路径?什么是“src_file”?
P
Peter Mortensen

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

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

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

键入 Python 解释器

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


K
Kirill Kruglov

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


f
fcdt

对我来说,如果我将 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 路径。
D
David Buck

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

马科斯大苏尔

代码

Anaconda 3(用于环境)

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

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

打开设置(工作区) 按照此屏幕截图打开 Python 路径 现在,单击 settings.json 中的编辑 制作此屏幕截图中给出的路径 /opt/anaconda3/bin/python

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

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


P
Peter Mortensen

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

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

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


P
Peter Mortensen

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

pipenv install pylint-django

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

load-plugins=pylint-django

P
Peter Mortensen

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

首先,我在导入一些模块时遇到了“未解析的导入”,我注意到我的安装是在全局 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.models 导入 setup_db 口头上,从 models.py 导入 setup_db 位于 app 文件夹中。


D
Devesh

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

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

这可以提供帮助。


A
Astrid

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

旧文件夹结构:

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

新结构:

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

O
Otabek Butcher

如何避免警告

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

https://i.stack.imgur.com/87e9c.png


忽略警告不是一个好习惯,相反,您应该建议解决根本原因的解决方案。
在这种情况下,我必须将答案的标题更改为“如何避免 python pylint 警告”?
P
Peter Mortensen

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

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

因此 JSON 内容应如下所示:

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

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