我有一个 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 身份附加到容器,所以我猜测这不是权限提升的问题。
我还尝试禁用除以下扩展之外的所有扩展,但得到了相同的结果:
以上所有扩展均是最新版本。
我也摆弄过设置
python.autocomplete.extraPaths
,但我不确定正确的路径是什么。必须将库添加到全局 python 安装中安装的路径似乎也是错误的,特别是因为我没有使用虚拟环境(它位于 docker 容器等中)。
如何修复 VS Code 以便它识别此导入,并且我可以使用“转到定义”来探索这些张量流函数/类/等?
TensorFlow 以 pylint 和 pylance 无法识别的方式定义其某些模块。这些错误并不一定表示设置不正确。
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
,第二个包名称看起来是一个内部命名空间,所以我猜最好只使用这个内部名称进行本地调试。
import pandas as pd
但是我收到了错误
"pd" is not accessedPylance (module) pd
所以我所做的是重新加载扩展 Python IntelliSense(Pylance),这解决了我的问题。
"python.analysis.extraPaths"
,然后添加站点包的路径。就我而言,我添加了
C:\Code\Python39\Lib\site-packages
,现在工作正常。
from tensorflow import compat
tf = compat.v1