【问题标题】:Using Mypy with `.pyi` stub files将 Mypy 与 `.pyi` 存根文件一起使用
【发布时间】:2022-10-19 21:20:39
【问题描述】:

假设我在文件home/func.py 中有一个简单的函数,我调用了它。

def f(x):
   return x

print(f("example"))

现在假设我想使用一个存根检查这个函数,home/stubs/func.pyi,它看起来像:

def f(x: int): ...

现在我想用mypy 检查我的代码,看看我是否犯了任何打字错误。在home/func.py 上运行mypy 我预计会出现警告/错误,例如:Got string where int was expected - 但是我无法使用此功能。

我在网上和文档中阅读的内容表明我应该创建一个 home/mypy.ini 配置文件,其中包含以下内容:

[mypy]
mypy_path = $MYPY_CONFIG_FILE_DIR/stubs

然后我应该在指向这个配置时运行mypy,比如:python -m mypy --config mypy.ini func.py。这没有奏效。

我知道我可以在函数定义中使用类型注释,但在这种情况下,存根的使用是非可选的。任何帮助都非常感谢。

【问题讨论】:

    标签: python mypy stub typing pyi


    【解决方案1】:

    直到今天(Python 3.10 和 MyPy 0.982),和你一样,我还无法将存根与代码分开并使其在我的项目中工作。

    现在我要么将注释放在代码中,要么使用替代品(例如pytypepyrightPyre)。

    我希望其他人纠正我,或者了解它在其他项目中是如何完成的(例如Panda,或Django)。

    一些提示可以理解

    引用Pragy Agarwal

    这使得存根文件成为对 mypy 的一种“撒谎”的方式。

    有没有办法将代码和类型信息保存在单独的文件中(为了便于阅读),同时仍然能够根据类型信息检查代码?

    这反过来又引用了尚未解决的问题“Test stub files against real code”。

    来自 BDFL 的上下文quote

    如果您想要类型注释,请输入 main.py 并去掉 main.pyi

    【讨论】:

      猜你喜欢
      • 2020-01-17
      • 2020-03-21
      • 2016-09-28
      • 1970-01-01
      • 2020-02-09
      • 2020-01-06
      • 2023-01-16
      • 2017-04-27
      相关资源
      最近更新 更多