Python VS代码/Pylance/Pylint无法解析导入 总结
我有一个python导入,当从VS代码终端运行时可以工作,但是VS代码的编辑器给出了有关的警告。此外,“转到定义”也不起作用 问题 我已经从图像Python VS代码/Pylance/Pylint无法解析导入 总结,python,tensorflow,visual-studio-code,pylint,pylance,Python,Tensorflow,Visual Studio Code,Pylint,Pylance,我有一个python导入,当从VS代码终端运行时可以工作,但是VS代码的编辑器给出了有关的警告。此外,“转到定义”也不起作用 问题 我已经从图像tensorflow/tensorflow:1.15.2-py3创建了一个docker容器,然后使用VS代码的“远程容器”扩展将其附加到该容器上。然后我在容器中创建了以下文件 main.py: import tensorflow.compat.v1 as tf print(tf.__version__) 这在VS代码终端中运行良好,但是编辑器和问题窗格
tensorflow/tensorflow:1.15.2-py3
创建了一个docker容器,然后使用VS代码的“远程容器”扩展将其附加到该容器上。然后我在容器中创建了以下文件
main.py:
import tensorflow.compat.v1 as tf
print(tf.__version__)
这在VS代码终端中运行良好,但是编辑器和问题窗格都给我一个未解决的导入'tensorflow.compat'
警告。另外,“转到定义”在tf.\uu版本\uuu
上不起作用
我正在使用几个扩展,但我相信相关的扩展是MicrosoftPython扩展(安装在容器中),以及远程容器扩展,现在是Pylance扩展(安装在容器中)
我尝试过的事情
我用默认的pylint
尝试了这个方法,然后在安装pylance
后也尝试了这个方法,结果类似。我也看到过一些类似的问题,但它们与为作为项目一部分的模块设置正确的源文件夹位置有关。相比之下,我的项目中的代码似乎可以很好地处理导入/转到定义。外部库似乎不起作用
另外,为了这个简单的示例,我将容器附加为root,因此我猜这不是提升权限的问题
我还尝试禁用除以下扩展之外的所有扩展,但得到了相同的结果:
- 远程-容器(本地)
- 远程-WSL(本地)
- Python(在容器上)
- Jupyter(在容器上,Python出于某种原因需要)
python.autocomplete.extrapath
,但我不确定正确的路径是什么。将库添加到全局python安装中安装的路径似乎也是错误的,特别是因为我没有使用虚拟环境(它位于docker容器中)
问题
如何修复VS代码,使其识别此导入,并使用“转到定义”来探索这些tensorflow函数/类/etc?tldr;
TensorFlow以pylint和pylance无法识别的方式定义了一些模块。这些错误不一定表示设置不正确
要修复:
- pylint:安全地忽略pylint警告
- Intellisense:目前我所知道的修复Intellisense的最佳方法是将导入替换为其别名的模块(通过将别名作为
导入repl中,然后运行x
)。因为在我的例子中,别名的目标是一个内部名称,所以您可能不想将这些更改签入到源代码管理中。不理想help(x)
import tensorflow.compat.v1 as tf
tf.estimator.RunConfig()
以上代码给出pylint警告并中断intellisense。但是,如果您在REPL中手动导入上述内容并运行help(tf)
,则会显示以下软件包,您可以使用该软件包:
import tensorflow_core._api.v1.compat.v1 as tf
tf.estimator.RunConfig()
第二个示例不会导致pylint警告。Intellisense功能(转到定义、Ctrl+单击等)也适用于第二个示例
但是,基于\u api
,第二个包名似乎是一个内部名称空间,因此我猜想最好只使用此内部名称进行本地调试
确认/门票
- pylint:我找到了一张关于pylint的票证,它看起来是相关的
- 智能感知:我已经和派伦斯谈过了