Visual Studio代码中的Pylint"未解决的导入"错误

jAC*_*jAC 42 python django pylint visual-studio-code

我正在使用以下设置

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

我希望我们能够在visual studio代码中使我的生活变得更轻松,但是,每次导入我都会声明"未解决的导入".即使是默认的django导入(即来自django.db的导入模型).

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

一切都很好,但它开始变得烦人.

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

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

有没有人遇到这个问题并知道快速解决方案让它工作?

谢谢,jAC

rud*_*dra 35

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

{
    "python.pythonPath": "/path/to/your/venv/bin/python",
}
Run Code Online (Sandbox Code Playgroud)

  • 这种作品.对于Python特定的导入,它现在解析那些但不是我自己的模型(即"来自users.models导入用户"仍然说它无法解决它).对此的想法? (11认同)
  • 没有把握。请尝试重新加载 vs 代码的窗口(来自 shell,`code <project_directory> -r`)或重新启动 vscode。 (11认同)
  • 我不确定,如果[工作区目录](https://code.visualstudio.com/docs/python/python-tutorial#_start-vs-code-in-a-project-workspace-folder)有时可能会发生设置不正确。请确保`manage.py`位于`workspace`的根目录中。另外,请确保[pylint配置正确](https://code.visualstudio.com/docs/python/linting#_pylint) (3认同)
  • 非常感谢!帮我解决了一个老问题! (3认同)
  • 天才!这是因为我的工作区不是从项目的根级别开始的.一旦我调整它开始工作.非常感谢! (2认同)

Shi*_*r G 26

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

"python.autoComplete.extraPaths": ["./path-to-your-code"],
Run Code Online (Sandbox Code Playgroud)

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

  • 大家好!我发现 ["./path-to-your-code"] 可以是 ["./**"] 在任何情况下双星表示根目录下的任何子文件夹!这是一个更简单的解决方案。 (8认同)
  • 这应该是答案。 (6认同)
  • 我有一个混合工作区,所有 python 代码都在一个子文件夹中。在子文件夹中添加 .vscode 将不起作用,这是唯一有效的解决方案。 (4认同)
  • 我必须使用这个: `"python.analysis.extraPaths": ["${workspaceFolder}/Source"]` (3认同)
  • 这完全是答案 (2认同)
  • vscode settings.json 的最佳答案。(如果使用workspace.xml,接受的答案可能是可行的方法,但不能肯定地说。我也在使用混合工作区)非常感谢您的解决方案。 (2认同)
  • 这对我有用!参考链接解释得很清楚。TL;博士; 对于用户在子目录中创建的本地脚本,上述设置有助于 python 解释器将子目录识别为其自己的工作空间。随后,识别工作区中的脚本并在导入整个模块或单个方法时解析导入。 (2认同)
  • 添加此命令以应用更改后,请不要忘记重新加载 VS Code 窗口。 (2认同)
  • 在某些时候,设置的名称发生了变化。现在是“python.analysis.extraPaths” (2认同)
  • 另一种消除 linting 错误的独特组合(代码仍然有效): 1. 将设置中的 Python 语言服务器从 Pylance 更改为其他内容,并 2. 添加 "python.autoComplete.extraPaths": ["./path-to -你的代码"] 到settings.json (2认同)

Tom*_*zik 20

该问题已在GitHub上公开:https : //github.com/Microsoft/vscode-python/issues/3840 MagnuesBrzenk和Spe​​nHouet提供了2个非常有用的答案。

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

PYTHONPATH=YOUR/MODULES/PATH
Run Code Online (Sandbox Code Playgroud)

并在您的settings.json中添加

"python.envFile": ".env"  
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,效果很好!“” $ {workspaceFolder} /。env“`PYTHONPATH = FolderName` (4认同)

小智 20

如果你更像我自己,你可以使用菜单File 中的 Visual Studio Code 配置?偏好设置( Ctrl+ ,)。转到扩展蟒蛇

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

Visual Studio 代码设置

  • 相对导入的未解决导入显然是不正确的,这可以消除它。 (4认同)
  • 这只能解决警告问题,不能解决问题。如果我使用 python 路径方法,那么导入警告就会消失,并且“钻取”(“转到定义”)和“参数提示”也起作用。 (2认同)

hex*_*exr 20

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

"python.languageServer": "Jedi"
Run Code Online (Sandbox Code Playgroud)


Eva*_*tti 17

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

在此处输入图片说明

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

在此处输入图片说明

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

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

在此处输入图片说明

  • 这正是我的问题(在 Mac 上),选择合适的解释器解决了它。谢谢! (2认同)

ted*_*ted 16

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

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

在此处输入图片说明

  • 在我的情况下,这不起作用,但希望它可以帮助其他人解决这个问题。 (3认同)
  • 最好的解决方案在这里 (2认同)

小智 15

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

"python.languageServer": "Jedi"
Run Code Online (Sandbox Code Playgroud)


小智 13

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

{    
    "python.jediEnabled": false
}
Run Code Online (Sandbox Code Playgroud)

  • 最好添加一些解释。 (16认同)
  • 编辑这一行是您项目中的一个重大变化。Line: "python.jediEnabled": false 禁用旧语言服务器并启用新的 Microsoft Python 语言服务器。看这里:https://github.com/Microsoft/vscode-python/issues/2177 我认为向我们的 envFile 添加必要的依赖项要简单得多。另一个答案里有描述。有了新的 Microsoft Python 语言服务器,智能感知对我来说效果更好了。 (3认同)

dil*_*ess 10

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

"python.analysis.disabled": [
    "unresolved-import"
],
"python.linting.pylintArgs": ["--load-plugin","pylint_protobuf"]
Run Code Online (Sandbox Code Playgroud)

第一行实际上只是隐藏了 linting 错误。当然不是永久性的解决方案,但可以使屏幕变得整洁。

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

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


Sur*_* Jr 10

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

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

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


rol*_*oll 7

我的解决方案

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

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

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

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

    {
        "python.pythonPath": "/usr/local/bin/python3",
    }
    
    Run Code Online (Sandbox Code Playgroud)
  4. 这是 Python 2 的示例

    {
        "python.pythonPath": "/usr/local/bin/python",
    }
    
    Run Code Online (Sandbox Code Playgroud)
  5. 如果您不知道 Python 安装位置,只需运行命令which pythonwhich python3在终端上。它将打印 Python 位置。

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


Ani*_*Ani 7

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

目录结构:

Project_dir:
    .vscode/settings.json
    dir_1
        > a
        > b
        > c
    dir_2
        > x
        > y
        > z
Run Code Online (Sandbox Code Playgroud)

我们想要什么:

Project_dir
    dir_3
        import a
        import y
Run Code Online (Sandbox Code Playgroud)

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

Import "dir_1.a" could not be resolvedPylancereportMissingImports
Import "dir_2.y" could not be resolvedPylancereportMissingImports
Run Code Online (Sandbox Code Playgroud)

对我有用的:

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

在上面的示例中,在“.vscode/settings.json”中添加以下“要附加的代码”

文件名:

.vscode/settings.json
Run Code Online (Sandbox Code Playgroud)

要附加的代码:

"python.analysis.extraPaths": [dir_1, dir_2]
Run Code Online (Sandbox Code Playgroud)

  • 为我工作,但我必须将目录名称放在引号中。 (2认同)

Ali*_*ari 6

When I > reload window that fixes.

ref: https://github.com/Microsoft/vscode-python/issues/3840#issuecomment-452657892

  • 如果我单击该文件,它只是隐藏警告,它会再次显示! (3认同)

nai*_*irb 6

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

"python.jediEnabled": true
Run Code Online (Sandbox Code Playgroud)

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

  • 在 VSC python 扩展 v2020.8.10 上获取未知配置 python 3.8 (3认同)

Lin*_*oln 5

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

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

给定以下示例项目结构:

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

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

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


Nic*_*coE 5

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

原始文件夹结构:

    root/
    __init__.py  # Empty

        folder/
            __init__.py # Empty

            sub_folder_b/
                my_code.py
            sub_folder_c/
                another_code.py

Run Code Online (Sandbox Code Playgroud)

在 another_code.py 中:

from folder.sub_folder_b import my_code.py
Run Code Online (Sandbox Code Playgroud)

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

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

from root.folder.sub_folder_b import my_code.py
Run Code Online (Sandbox Code Playgroud)

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