VS Code / Pylance / Pylint 无法解析导入

问题描述 投票:0回答:6

总结

我有一个 python 导入,可以在从 VS Code 终端运行时运行,但 VS Code 的编辑器会发出警告。另外,“转到定义”不起作用。

问题

我从图像

tensorflow/tensorflow:1.15.2-py3
创建了一个 docker 容器,然后使用 VS Code 的“Remote-Containers”扩展附加到它。然后我在容器中创建了以下文件。

main.py:

import tensorflow.compat.v1 as tf
print(tf.__version__)

这在 VS Code 终端中运行良好,但编辑器和问题窗格都给我一个

unresolved import 'tensorflow.compat'
警告。另外,“转到定义”在
tf.__version__
上不起作用。

我正在使用多个扩展,但我相信相关的扩展是 Microsoft Python 扩展(安装在容器中)、远程 - 容器扩展,以及现在的 Pylance 扩展(安装在容器中)。

我尝试过的事情

我已经使用默认的

pylint
尝试过此操作,然后在安装
pylance
后也尝试了类似的结果。我还看到了一些关于类似问题的docs,但它们与为项目一部分的模块设置正确的源文件夹位置有关。相反,我的代码在我的项目中似乎可以很好地处理导入/转到定义。 外部库似乎不起作用。

另外,为了这个最小的示例,我已以 root 身份附加到容器,所以我猜测这不是权限提升的问题。

我还尝试禁用除以下扩展之外的所有扩展,但得到了相同的结果:

  • 远程 - 容器(本地)
  • 远程 - WSL(本地)
  • Python(在容器上)
  • Jupyter(在容器上,Python 由于某种原因需要)

以上所有扩展均是最新版本。

我也摆弄过设置

python.autocomplete.extraPaths
,但我不确定正确的路径是什么。必须将库添加到全局 python 安装中安装的路径似乎也是错误的,特别是因为我没有使用虚拟环境(它位于 docker 容器等中)。

问题

如何修复 VS Code 以便它识别此导入,并且我可以使用“转到定义”来探索这些张量流函数/类/等?

python tensorflow visual-studio-code pylint pylance
6个回答
9
投票

tldr;

TensorFlow 以 pylint 和 pylance 无法识别的方式定义其某些模块。这些错误并不一定表示设置不正确。

修复:

  • pylint: pylint 警告已被安全忽略。
  • Intellisense: 目前我知道修复 Intellisense 的最佳方法是将导入替换为它们别名的模块(通过在 repl 中导入别名为
    x
    然后运行
    help(x)
    来找到)。因为在我的例子中别名的目标是内部名称,所以您可能不想将这些更改签入源代码管理。不理想。

详情

关于 linting:tensorflow 似乎以工具无法理解的方式定义其模块。此外,该包似乎是另一个包的某种别名。例如:

import tensorflow.compat.v1 as tf
tf.estimator.RunConfig()

上面的代码给出了 pylint 警告并破坏了智能感知。但是,如果您在 REPL 中手动导入上述内容并运行

help(tf)
,它会显示以下包,您可以使用它:

import tensorflow_core._api.v1.compat.v1 as tf
tf.estimator.RunConfig()

第二个示例不会导致 pylint 警告。此外,智能感知功能(转到定义、Ctrl+单击等)也适用于第二个示例。

但是,基于

_api
,第二个包名称看起来是一个内部命名空间,所以我猜最好只使用这个内部名称进行本地调试。

确认/门票


4
投票
所以对我来说我试图

import pandas as pd
但是我收到了错误

"pd" is not accessedPylance (module) pd
所以我所做的是重新加载扩展 Python IntelliSense(Pylance),这解决了我的问题。


4
投票
我也遇到了同样的问题,但是有各种各样的软件包。 我的解决方案是转到 VSCode 设置并搜索

"python.analysis.extraPaths"

,然后添加站点包的路径。

就我而言,我添加了

C:\Code\Python39\Lib\site-packages

,现在工作正常。


3
投票
通常,为我解决 pylance 问题的方法是将我的

Python 解释器指向 virtualenv

打开命令面板

Ctrl + Shift + P


类型:

Python: Select Interpreter


它将显示它实际检测到的所有 python 解释器的列表:

选择

Enter interpreter path


输入本地 venv/bin 文件夹的路径或单击“查找”以使用文件资源管理器进行导航。

你的路径应该类似于:

venv/bin/python3.9


    


0
投票
我将“导入tensorflow as tf”更改为“从tensorflow import compat as tf” 它甚至适用于 tf.gfile.Gfile()


0
投票
这对我有用:

from tensorflow import compat tf = compat.v1
    
© www.soinside.com 2019 - 2024. All rights reserved.