【问题标题】:Pylint "unresolved import" error in Visual Studio CodeVisual Studio Code 中的 Pylint“未解决的导入”错误
【发布时间】:2020-06-05 13:09:56
【问题描述】:

我正在使用以下设置

  • 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。

标签: python django visual-studio-code pylint


【解决方案1】:

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

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

在您的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
  • 你这个天才!这是因为我的工作区不是从项目的根级别开始的。一旦我调整它开始工作。非常感谢!
  • 非常感谢!帮助我解决了一个古老的问题!
【解决方案3】:

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

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

【讨论】:

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

这个 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的路径?
【解决方案5】:

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

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

【讨论】:

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

如果您的 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 尤其是因为另一个答案表明恰恰相反。
【解决方案7】:

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

"python.languageServer": "Jedi"

【讨论】:

  • 同意。我也尝试了提供的所有选项,但这有效!
【解决方案8】:

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

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

【讨论】:

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

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

"python.jediEnabled": true

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

【讨论】:

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

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

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

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

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

【讨论】:

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

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

"python.languageServer": "Jedi"

【讨论】:

    【解决方案12】:

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

    【讨论】:

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

    我的解决方案

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

    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。

    【讨论】:

      【解决方案14】:

      The solution from Shinebayar G 工作,但另一个更优雅一点:

      复制自Python unresolved import issue #3840

      给定以下示例项目结构:

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

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

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

      【讨论】:

        【解决方案15】:

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

        原始文件夹结构:

            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。

        【讨论】:

          【解决方案16】:

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

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

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

          【讨论】:

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

          这对我有用:

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

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

          【讨论】:

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

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

          目录结构:

          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”(不是绝对路径)就可以了。
          • 为我工作,但我必须将目录名称放在引号中。
          【解决方案19】:

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

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

          显然root 和src 会检查本地包,但这里必须添加其他包。

          【讨论】:

          • 安装 Pylance 扩展后立即为我解决了问题
          • 我安装了 pylance,但对于某些项目,我仍然面临这个问题。 extraPaths 是否应该指向一条路径?什么是“src_file”?
          【解决方案20】:

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

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

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

          键入Python 解释器

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

          【讨论】:

            【解决方案21】:

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

            【讨论】:

              【解决方案22】:

              对我来说,如果我将 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 路径。
              【解决方案23】:

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

              • macos big sur
              • vscode
              • Anaconda 3(用于环境)

              我在 Django 启动过程中遇到了这个错误。 所以,我按照这些步骤解决了这个错误。

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

              1. 打开设置(工作区)

              2. 按照此屏幕截图打开 Python 路径

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

              4. 制作此屏幕截图中给出的路径/opt/anaconda3/bin/python

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

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

              【讨论】:

                【解决方案24】:

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

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

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

                【讨论】:

                  【解决方案25】:

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

                  pipenv install pylint-django
                  

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

                  load-plugins=pylint-django
                  

                  【讨论】:

                    【解决方案26】:

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

                    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
                      

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

                    【讨论】:

                      【解决方案27】:

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

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

                      这会有所帮助。

                      【讨论】:

                        【解决方案28】:

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

                        旧文件夹结构:

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

                        新结构:

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

                        【讨论】:

                          【解决方案29】:

                          How to avoid warning

                          请注意,这只是跳过警告而不是解决它。 首先在 json 中打开 Visual Studio 代码设置,并在 "[python]":{} 之后添加以下参数

                          "python.linting.pylintArgs": ["--rep[![在此处输入图像描述][1]][1]orts", "12", "--disable", "I0011"],
                          "python.linting.flake8Args": ["--ignore=E24,W504", "--verbose"]
                          "python.linting.pydocstyleArgs": ["--ignore=D400", "--ignore=D4"]

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

                          【讨论】:

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

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

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

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

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

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

                          【讨论】:

                            猜你喜欢
                            • 1970-01-01
                            • 2017-09-20
                            • 1970-01-01
                            • 2019-11-25
                            • 1970-01-01
                            • 2018-11-17
                            • 2019-03-31
                            相关资源
                            最近更新 更多