【问题标题】:VS Code Pylint unresolved import on not yet installed packageVS Code Pylint 未解决导入尚未安装的包
【发布时间】:2020-12-13 10:55:35
【问题描述】:

我的包的结构如下:

package
|___package
|        |_subpackage
|        |            |_ __init__.py
|        |            |_ module_Y.py
|        |_ __init__.py
|        |_ module_X.py
|_ main.py
|_ setup.py

我的__init__.py 文件都是空的,module_Y.pyfrom package import module_X 这一行。

我还没有安装这个包,因为它甚至还没有远程工作,但我希望 Pylint 能够理解module_Y.py 中的导入语句将是正确的。我知道这 必须 是可能的,因为克隆 TF-Agents 的 repo 并在 VS 代码中打开它,pylint 了解文件中的引用1 即使我还没有安装了 TF-agents repo。

我知道我可以使用像 from .. import module_X 这样的相对导入,并且我知道我可以禁用这些 pylint 警告,但这两个我是一半的解决方案。第一个不如from package import module_X 声明那么干净和清晰,第二个解决方案可能并没有告诉我实际上有什么问题。

我错过了什么?

1tf_agents/agents/dqn/dqn_agent.py 为例,它能够将导入解析为tf_agents.policies

【问题讨论】:

  • 如果您想使用 pylint 并删除所有警告,我建议您阅读 pylint documentation 并查看它如何进行检查并相应地进行操作
  • @sahasrara62 正如我在问题中所说,我知道我可以禁用 pylint 警告,但这不是我想要在这里做的。我希望 Pylint 警告我可能有错误的导入,但我希望它明白,一旦设置了包,这个导入语句实际上是正确的
  • 这就是我说的原因,看看 pylint 如何检查导入并尝试相应地使您的项目导入

标签: python visual-studio-code package python-import pylint


【解决方案1】:

根据你的描述,我重现了这个问题,下面是我的解决方法,你可以参考一下:

方式一:

  1. 请在文件“module_Y.py”开头添加如下代码,即添加上一级目录“package”的文件路径:
import sys
sys.path.append("..")
  1. 请在“launch.json”中设置"cwd": "${fileDirname}",

  2. 点击F5调试代码:(由于此警告不影响代码的使用,我们可以在代码可用后关闭:在settings.json中使用"python.analysis.disabled": [ "unresolved-import" ],

方式2:

或者你也可以在“launch.json”中设置:(将当前工作空间的文件夹路径添加到系统路径中。)

"env": {
                "PYTHONPATH": "${workspaceFolder}"
            },

【讨论】:

  • 好的,方法 1) 与 from .. import module_x 并没有本质上的不同,在您的屏幕上,它似乎无法解决 Pylint 警告。方法 2) 更符合我的要求,但它不是自动的,即如果我只是在新 PC 上克隆 repo,我还必须更改其中的 launch.json 文件(除非我将其推送到 git ,这是不可取的)。你看过我提到的 tf-agents repo 吗?因为他们实际上都没有使用这些方法,并且仍然设法让 pylint 没有在整个地方放置警告......
  • ... 关键是 TF-Agents repo 中缺少的不仅仅是警告,而是我可以“转到 Deinition”,即使该软件包尚未安装并且VS Code 设法以某种方式找出定义的位置(即使没有 launch.json 文件)
  • @Federico Malerba - 从其他文件夹导入文件时,VSCode 默认从当前文件的父文件夹开始。因此,我们需要通过设置文件将项目路径添加到系统路径中,或者将文件路径添加到同级文件夹路径中。另外,根据此搜索规则,您可以尝试将“module_X.py”进入“子包”,不需要使用settings.json和launch.json文件。
猜你喜欢
  • 2020-06-05
  • 2020-07-30
  • 2020-03-18
  • 2021-03-24
  • 1970-01-01
  • 2018-10-22
  • 2020-07-27
相关资源
最近更新 更多