toml 中的 mypy 覆盖被忽略?

问题描述 投票:0回答:2

以下是 mypy 文档中 toml 文件示例的简化版本:

[tool.mypy]
python_version = "3.7"
warn_return_any = true
warn_unused_configs = true

[[tool.mypy.overrides]]
module = ["somelibrary"]
ignore_missing_imports = true

我在一个项目中使用此配置,其中我有一个第三方库(此处名为“somelibrary”),该库缺少类型提示,因此会在 mypy 报告中导致大量垃圾邮件。

全局 mypy 配置已被选中,所以我知道整体设置很好,但是每当我将某个库覆盖中的ignore_missing_imports切换为 true 时,mypy 的行为仍然就像我将其保留为 false 一样(我在全局中使用了相同的选项) mypy 配置以确保事情按预期方式工作,就是这种情况)。

我正在使用(当前)最新的 mypy 版本,0.931。

我做错了什么吗? mypy 被窃听了吗?还有别的吗?

python mypy
2个回答
9
投票

您应该将您的项目添加到覆盖中。假设您的项目名为“my_project”,并且您的库/模块“somelibrary”直接位于“my_project”文件夹下。 toml 文件应如下所示:

[tool.mypy]
python_version = "3.7"
warn_return_any = true
warn_unused_configs = true

[[tool.mypy.overrides]]
module = "my_project.somelibrary"
ignore_missing_imports = true

0
投票

您可以尝试通过以下方式从命令行运行 mypy:

mypy --no-incremental src

Mypy 使用缓存功能来加速从先前评估的代码模块生成结果的过程。这样做主要是为了处理速度,并且 mypy 会跳过重新评估未更改的代码。不幸的是,我的经验是,对 mypy 配置(在 pyproject.toml 中)的更改不会强制 mypy 重新评估,即使像您所做的配置更改应该导致结果更改! 还可以使用 pyproject.toml 中的全局 mypy 设置来禁用缓存。它的工作原理如下:

[tool.mypy] no_incremental = true

我更喜欢命令行标志,因为全局设置可能会影响管道速度,但它就是这样。

© www.soinside.com 2019 - 2024. All rights reserved.