【问题标题】:'Import "Path.to.own.script" could not be resolved Pylance (reportMissingImports)' in VS Code using Python 3.x on Ubuntu 20.04 LTS在 Ubuntu 20.04 LTS 上使用 Python 3.x 在 VS Code 中无法解析 Pylance (reportMissingImports) 导入“Path.to.own.script”
【发布时间】:2021-03-22 21:53:05
【问题描述】:

这是几个月前的similar situation I'd encountered,在pylance之前使用pylint

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

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

import General.Misc.general_tools as tools

现在,Pylance 表示:

Import "General.Misc.general_tools" could not be resolvedPylance (reportMissingImports)

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

因此,为了确保让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"
    ],
    ...
}

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

我发现here 的一种解决方法效果很好(将# type: ignore 附加到导入语句):

import General.Misc.general_tools as tools  # type: ignore

尽管如此,这只是一种解决方法,这就是为什么我要解决这个问题的根源。从技术上讲,我之前使用的是the same workaround 来消除来自pylint 的类似警告消息。可能这是 VS-Code settings.json 配置所固有的,因为使用 VS-Code 是这里的常数因素。


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

我加了

export PYTHONPATH="$PYTHONPATH:/home/andylu/Dokumente/Allgemeines_material/Sonstiges/Programming/Python/Scripts"

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

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

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


编辑"python.analysis.useImportHeuristic": true:

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


关于抑制/禁用 Pylance 'reportMissingImports' linting-message 的编辑:

我已经找到了how to suppress a specific Pylance-linting-message,如果您对此感兴趣,可以作为一种解决方法。特别是在我目前的情况下,无论如何我都需要在parallel 中使用pylint,所以我根本不依赖Pylance 的linter。

【问题讨论】:

  • 如果你做import General会解决吗,如果你在启动VSC之前添加PYTHONPATH的路径怎么办。也许 PyLance 只需要 "python.analysis.extraPaths" 中的相对路径
  • 感谢您的提示。它让我尝试了其他措施(请参阅上面我最初帖子的编辑)。我仍然从 pylance 收到相同的警告信息。除此之外,就我而言,绝对路径应该始终有效,但即使这是问题所在,现在我的项目中设置了所有 python- 和 sys-paths-venv,并且仍然pylance 不认识它。
  • 然后考虑向 PyLance 不遵守PYTONPATH 提出问题,但是虚拟环境如何合并本地和系统安装的模块,PyLance 可以处理这些
  • 现在,由于某种原因,它停止发出警告。我不知道它是如何解决的,但现在我关闭了pylance GitHub 网站上发布的问题:github.com/microsoft/pylance-release/issues/724
  • 我遇到了同样的掉毛问题。除了在 import 语句的末尾添加# type: ignore 之外,似乎仍然没有其他解决方案。

标签: python-3.x visual-studio-code python-import vscode-settings pylance


【解决方案1】:

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

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

【讨论】:

  • 感谢您的回复。但是,正如您在我的帖子中看到的那样,我已经尝试过但无济于事。也许现在有效果了。等我试用了,我会通知你的。
  • 有没有更具体的解决方案?我的意思是,如果我使用这个解决方案,我必须将所有路径添加到任何测试脚本所在的所有文件夹。
  • 我在我的 (Django) 项目中使用 virtualenv,我必须引用它的路径才能工作:~/.virtualenvs//Lib/site-packages/
  • 当“源”文件夹被命名为“src”以外的其他名称时,这非常有效。
【解决方案2】:

以下两种方法:

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

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

这是我获得上述分辨率的 github 链接:https://github.com/microsoft/pylance-release/issues/68

它对我有用:python 3.9VScodewindows10

【讨论】:

  • 感谢您的贡献。我也关注了 git-discussion 并看到了 "python.analysis.useImportHeuristic": true,我会尝试一下。至于第二种选择,这个解决方法已经在我最初的帖子中提到过,如果没有其他方法,这似乎是最后的手段。
  • 注释已注明。我确认这两种方法都适用于我拥有的设置,尽管您似乎使用的是Lubuntu 20.04,而我在windows10 上进行了测试。因此知道它与平台无关或其他方式会很有用。
  • 刚刚在 Windows 10 上检查过,在我的 settings.json 中,"python.analysis.useImportHeuristic": true 行是灰色的。当我将鼠标悬停在它上面时,它会显示“未知配置设置”。
  • @AndreasL。当我收到"Unknown Configuration Setting" 时,我也遇到了同样的情况。您找到解决方法了吗?
  • 这是预期的,因为它是一个隐藏选项。 github.com/microsoft/pylance-release/issues/…
【解决方案3】:

我遇到了类似的问题,即使在我的系统上有包之后,VS Code Pylance 也无法解析导入。

就我而言,我安装了 2 个不同版本的 python(一个使用 anaconda 发行版,另一个直接来自 python.org)

修复:在 VS 代码中选择正确的 Python 解释器。 Pylance 会停止抱怨 :)

【讨论】:

  • 这对我有用。谢谢!
【解决方案4】:

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

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

那么如何确保 Pylance/Pylint/ 读取安装在创建的虚拟环境中的模块?您需要在左下角检查选择的解释器,如果没有在虚拟环境中激活,请单击选择的解释器,vs-code 会提示您为项目选择默认解释器。选择您当前的虚拟环境,visual studio pylance 将读取当前环境中的模块。希望这适用于任何正在与之斗争的人

【讨论】:

  • 这行得通,但我们中的一些人还试图在当前环境之外添加其他 sys.paths,即使它们设置正确并且在我们运行 py 时 Pylance 也无法识别它们文件。 This Example 是唯一对我有用的东西。
  • 如果设置了settings.json,则可以在./vscode/settings.json 中添加这些路径,vscode 将从那里读取所有配置
【解决方案5】:

另一个选择是在 vscode 项目的根目录下添加一个.env 文件。例如:

.env

PYTHONPATH=src/mydir

您可以使用上面的相对路径,也可以使用完整路径。 .env 的好处是它可以修复 vscode 中的 pylancepylint。在git 上提交和分享比在.vscode/settings.json 上更容易。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-23
    • 2021-03-24
    • 2021-09-29
    • 1970-01-01
    • 2020-09-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-18
    相关资源
    最近更新 更多