VS Code / Pylance / Pylint 无法解析导入
VS Code / Pylance / Pylint Cannot resolve import
总结
我有一个 python 导入,当 运行 来自 VS Code 终端时,它可以工作,但是那个 VS Code 的编辑器发出警告。此外,“转到定义”不起作用。
问题
我已经从图像 tensorflow/tensorflow:1.15.2-py3
创建了一个 docker 容器,然后使用 VS Code 的“远程容器”扩展附加到它。然后我在容器中创建了以下文件。
main.py:
import tensorflow.compat.v1 as tf
print(tf.__version__)
这 运行 在 VS 代码终端中很好,但编辑器和问题窗格都给我一个 unresolved import 'tensorflow.compat'
警告。此外,“转到定义”在 tf.__version__
.
上不起作用
我正在使用几个扩展,但我认为相关的是 Microsoft Python 扩展(安装在容器中),以及 Remote - Containers 扩展,现在是 Pylance 扩展(安装在容器)。
我尝试过的事情
我用默认的 pylint
试过了,然后在安装 pylance
后也得到了类似的结果。我还看到了一些 docs 类似的问题,但它们与为属于项目的模块设置正确的源文件夹位置有关。相比之下,我的项目 中的代码 似乎可以与 imports/go-to-definition 一起正常工作。 外部库似乎不起作用。
另外,为了这个最小的例子,我以 root 身份附加到容器,所以我猜这不是提升权限的问题。
我也试过禁用除以下以外的所有扩展,但得到了相同的结果:
- 远程 - 容器(本地)
- 远程 - WSL(本地)
- Python(在容器上)
- Jupyter(在容器上,出于某种原因 Python 需要)
以上所有扩展都是最新版本。
我也尝试过设置 python.autocomplete.extraPaths
,但我不确定正确的路径是什么。将库添加到全局 python 安装路径中似乎也是错误的,特别是因为我没有使用虚拟环境(它在 docker 容器中并且全部)。
问题
如何修复 VS Code 以便它识别此导入,并且我可以使用“转到定义”来探索这些 tensorflow functions/classes/etc?
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 警告。 Intellisense 功能(转到定义、Ctrl+单击等)也适用于第二个示例。
但是,根据 _api
,第二个包名称似乎是一个内部命名空间,所以我猜最好只使用这个内部名称进行本地调试。
Confirmation/Tickets
- pylint: 我找到了一张关于 pylint 的票据,其中 issues with a couple tensorflow imports 看起来相关。
- Intellisense:我已经 opened a ticket 使用了 pylance。
所以对我来说,我一直在努力
import pandas as pd
但我得到了错误
"pd" is not accessedPylance (module) pd
所以我所做的是重新加载扩展 Python IntelliSense(Pylance),这解决了我的问题。
我遇到了同样的问题,但有各种包。
我的解决方案是转到 VSCode 设置并搜索 "python.analysis.extraPaths"
,然后将路径添加到您的站点包。
就我而言,我添加了 C:\Code\Python39\Lib\site-packages
,现在一切正常。
总结
我有一个 python 导入,当 运行 来自 VS Code 终端时,它可以工作,但是那个 VS Code 的编辑器发出警告。此外,“转到定义”不起作用。
问题
我已经从图像 tensorflow/tensorflow:1.15.2-py3
创建了一个 docker 容器,然后使用 VS Code 的“远程容器”扩展附加到它。然后我在容器中创建了以下文件。
main.py:
import tensorflow.compat.v1 as tf
print(tf.__version__)
这 运行 在 VS 代码终端中很好,但编辑器和问题窗格都给我一个 unresolved import 'tensorflow.compat'
警告。此外,“转到定义”在 tf.__version__
.
我正在使用几个扩展,但我认为相关的是 Microsoft Python 扩展(安装在容器中),以及 Remote - Containers 扩展,现在是 Pylance 扩展(安装在容器)。
我尝试过的事情
我用默认的 pylint
试过了,然后在安装 pylance
后也得到了类似的结果。我还看到了一些 docs 类似的问题,但它们与为属于项目的模块设置正确的源文件夹位置有关。相比之下,我的项目 中的代码 似乎可以与 imports/go-to-definition 一起正常工作。 外部库似乎不起作用。
另外,为了这个最小的例子,我以 root 身份附加到容器,所以我猜这不是提升权限的问题。
我也试过禁用除以下以外的所有扩展,但得到了相同的结果:
- 远程 - 容器(本地)
- 远程 - WSL(本地)
- Python(在容器上)
- Jupyter(在容器上,出于某种原因 Python 需要)
以上所有扩展都是最新版本。
我也尝试过设置 python.autocomplete.extraPaths
,但我不确定正确的路径是什么。将库添加到全局 python 安装路径中似乎也是错误的,特别是因为我没有使用虚拟环境(它在 docker 容器中并且全部)。
问题
如何修复 VS Code 以便它识别此导入,并且我可以使用“转到定义”来探索这些 tensorflow functions/classes/etc?
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 警告。 Intellisense 功能(转到定义、Ctrl+单击等)也适用于第二个示例。
但是,根据 _api
,第二个包名称似乎是一个内部命名空间,所以我猜最好只使用这个内部名称进行本地调试。
Confirmation/Tickets
- pylint: 我找到了一张关于 pylint 的票据,其中 issues with a couple tensorflow imports 看起来相关。
- Intellisense:我已经 opened a ticket 使用了 pylance。
所以对我来说,我一直在努力
import pandas as pd
但我得到了错误
"pd" is not accessedPylance (module) pd
所以我所做的是重新加载扩展 Python IntelliSense(Pylance),这解决了我的问题。
我遇到了同样的问题,但有各种包。
我的解决方案是转到 VSCode 设置并搜索 "python.analysis.extraPaths"
,然后将路径添加到您的站点包。
就我而言,我添加了 C:\Code\Python39\Lib\site-packages
,现在一切正常。