Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python VS代码/Pylance/Pylint无法解析导入 总结_Python_Tensorflow_Visual Studio Code_Pylint_Pylance - Fatal编程技术网

Python VS代码/Pylance/Pylint无法解析导入 总结

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代码终端中运行良好,但是编辑器和问题窗格

我有一个python导入,当从VS代码终端运行时可以工作,但是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的最佳方法是将导入替换为其别名的模块(通过将别名作为
    x
    导入repl中,然后运行
    help(x)
    )。因为在我的例子中,别名的目标是一个内部名称,所以您可能不想将这些更改签入到源代码管理中。不理想
细节 关于linting:tensorflow似乎以工具无法理解的方式定义了它的模块。此外,该包似乎是另一个包的某种别名。例如:

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的票证,它看起来是相关的
  • 智能感知:我已经和派伦斯谈过了

一般来说,这样的问题可以通过扩展来解决,有时这是使用错误扩展的副作用。你有没有找过一个扩展来处理你想要完成的工作流程?您安装的intellisense完全可能无法理解您正在使用的配置。我不知道你所说的“这样的问题可以通过扩展来解决”是什么意思。我相信我拥有的这些扩展应该可以解决这个问题,但我在正确配置它们时遇到了困难。我所说的有一个重要的警告:您可能安装了错误的扩展。验证已安装的扩展,检查是否存在任何不兼容的扩展。当有疑问时,卸载您拥有的,并有选择地重新安装您需要的。这不是任何人都能帮你解决的问题。