在 Ubuntu 20.04 LTS 上使用 Python 3.x 在 VS Code 中无法解析“导入“Path.to.own.script”Pylance (reportMissingImports)”

And*_* L. 32 python-import python-3.x visual-studio-code vscode-settings pylance

这是一个类似的情况我已经遇到过了几个月前使用pylint的事先pylance

我的python 3.9x- 脚本(使用VS Codeon Ubuntu 20.04 LTS)从以下自定义“工具”导入开始:

import sys
sys.path.append(
    '/home/andylu/Dokumente/Allgemeines_material/Sonstiges/Programming/Python/Scripts/'
)

import General.Misc.general_tools as tools
Run Code Online (Sandbox Code Playgroud)

现在,Pylance声明:

Import "General.Misc.general_tools" could not be resolvedPylance (reportMissingImports)
Run Code Online (Sandbox Code Playgroud)

即使在程序执行期间模块被完美地导入,也会发生这种情况。

因此,为了确保Pylance理解这是一个现有的模块路径,除了sys.path.append(..)- 方法之外,我在settings.json- 文件中添加了以下内容:

{
    ...
    // Possible values: "Jedi", "Pylance", "Microsoft", "None".
    "python.languageServer": "Pylance",
    // NOTE on changing from microsoft to pylance language server: python.autoComplete.extraPaths --> python.analysis.extraPaths
    // Docs: https://github.com/microsoft/pylance-release/blob/master/TROUBLESHOOTING.md#unresolved-import-warnings
    "python.analysis.extraPaths": [
        "/home/andylu/Dokumente/Allgemeines_material/Sonstiges/Programming/Python/Scripts"
    ],
    ...
}
Run Code Online (Sandbox Code Playgroud)

然而,reportMissingImports即使它被正确导入,我仍然收到 -消息。

我在这里找到的一种解决方法效果很好(附加# type: ignore到导入语句中):

import General.Misc.general_tools as tools  # type: ignore
Run Code Online (Sandbox Code Playgroud)

尽管如此,这只是一种解决方法,这就是我希望解决此问题根源的原因。从技术上讲,这我之前使用的解决方法相同,以消除来自pylint. 可能这是VS-Code settings.json- 配置固有的东西,因为使用VS-Code是这里的常数因素。


编辑没有解决问题的其他措施:

我加了

export PYTHONPATH="$PYTHONPATH:/home/andylu/Dokumente/Allgemeines_material/Sonstiges/Programming/Python/Scripts"
Run Code Online (Sandbox Code Playgroud)

到我的~/.bashrc- 文件,这使我现在可以python从终端直接在-shell 中导入模块,而无需之前的sys-path 操作。然而,这仅适用于全局系统 python 环境,而不适用于任何虚拟环境。为了更改那里的 sys-path,我按照这些说明进行操作,而我的特定虚拟环境“scrapy_course”已打开,如下所示:

(scrapy_course) andylu@andylu-Lubuntu-PC:~/$ add2virtualenv /home/andylu/Dokumente/Allgemeines_material/Sonstiges/Programming/Python/Scripts
Run Code Online (Sandbox Code Playgroud)

该命令适用于virtualenvwrapper,它可以巧妙地结合 pyenv 管理虚拟环境。现在,即使没有sys.path.append(...)导入模块,我也可以在当前环境中运行上述脚本,pylance但仍然无法正确识别路径并向我显示与以前相同的警告。


编辑"python.analysis.useImportHeuristic": true

我一直在我的全局settings.json文件中激活这个选项,但我仍然没有注意到任何影响。一旦这种情况发生变化,或者最终有(不同的)解决方案出现在我面前,我会及时通知您。


编辑抑制/禁用 Pylance 'reportMissingImports' linting-消息:

我已经找到了如何完全抑制特定的 Pylance-linting-消息,如果您有兴趣作为一种解决方法。尤其是在我目前的状况,我需要利用pylint的平行无论如何,所以我完全不依赖于Pylance的棉短绒。

Rya*_*yan 23

默认情况下,Pylance 包含工作区的根路径。如果要包含其他子目录作为导入解析路径,可以使用python.analysis.extraPaths工作区的设置添加它们。

  • 在 VS Code 中按<ctrl> + <,>打开设置。
  • 输入 python.analysis.extraPaths
  • 选择“添加项目”
  • 输入库的路径 /home/andylu/Dokumente/Allgemeines_material/Sonstiges/Programming/Python/Scripts/

  • 有没有不太具体的解决方案?我的意思是,如果我使用此解决方案,我必须将所有路径添加到任何测试脚本所在的所有文件夹。 (2认同)
  • 我在我的(Django)项目中使用 virtualenv,并且必须引用它的工作路径: ~/.virtualenvs/&lt;project directory&gt;/Lib/site-packages/ (2认同)
  • 除此之外,请确保[选择并激活正确的 Python 环境](https://code.visualstudio.com/docs/python/environments#_select-and-activate-an-environment)。 (2认同)

D.L*_*D.L 18

下面两种方法:

  1. 在 VS 代码中,您可以编辑该setting.json文件。如果添加"python.analysis.useImportHeuristic": truelinting 错误将被删除。

  2. 另一种方法是# type: ignore在导入代码的末尾添加。

这是我从以下地址获得上述解决方案的 github 链接:https : //github.com/microsoft/pylance-release/issues/68

它对我有用:python 3.9, VScode,windows10

  • 刚刚在 Windows 10 上检查过,在我的 `settings.json` 中,行 `"python.analysis.useImportHeuristic": true` 是灰色的。当我将鼠标悬停在它上面时,它显示“未知配置设置”。 (6认同)
  • 这是预期的,因为它是一个隐藏选项。https://github.com/microsoft/pylance-release/issues/1167#issuecomment-822647493 (2认同)

Fel*_*nda 6

默认情况下,python 选择全局解释器作为您拥有的任何 python 项目的解释器。因此模块/包解析是在全局上下文中进行的。对于您用来获取已安装模块的任何 linter,您必须确保选择正确的解释器

例如,如果您曾经使用过 pycharm,它确实会要求您选择解释器并使用所选解释器创建虚拟环境。同样,如果您在 Visual Studio Code 中启动一个项目,即使您创建虚拟环境,它也会将全局解释器作为默认解释器,请参阅所选解释器的左下部分

在此输入图像描述

那么如何确保 Pylance/Pylint/ 读取创建的虚拟环境中安装的模块呢?您需要在左下角检查所选的解释器,如果未在虚拟环境中激活,请单击所选的解释器,vs-code 将提示您为项目选择默认解释器。选择您当前的虚拟环境,Visual Studio pylance 将读取当前环境中的模块。希望这对任何遇到同样问题的人都有效

在此输入图像描述

在此输入图像描述