注:这个答案是这样的没有回答我的问题。它只是重申了我已经读过的内容。
这是怎么回事?我读到的所有东西都说,typeshed与MyPy捆绑在一起,并包含第三方库的存根。我已经在虚拟环境中安装和运行了MyPy,我正在尝试使用它来输入Flask代码,但我只是没有得到它。
我在TypeScript中有一个背景,我正在寻找类似的东西,但我不明白我们应该如何在MyPy中使用存根。例如,我有一个函数:
def create_app(config_name="default"):
app: Flask = Flask(__name__)
app.config.from_object(Configuration)
CORS(app)
register_extensions(app)
register_blueprints(app)
@app.route("/health")
def health_check():
return json.dumps({"status": "up"})
return app非常标准的瓶,但严格不允许任何设置,这将成为一个无法挽救的混乱。应用的类型是什么?我知道typeshed 有烧瓶的存根,但我不知道如何实际使用这些存根。typeshed文档说:
如果您只是使用mypy (或pytype或PyCharm),而不是开发mypy,则根本不需要与已键入的repo交互:类型类型的副本与mypy捆绑在一起。
因此,我假设我不需要导入类型,文档也没有提到导入它们。
例如,有一个名为app.pyi的存根,但是如果我对函数进行如下注释:
def create_app(config_name="default") -> app:我得到了错误name app is not defined。如果我进口它:
from typeshed import app我得到了错误Return type becomes any due to an unfollowed import,据我所知,这意味着没有这样的模块typeshed,或者它没有名为app的成员。
那么,如何才能真正访问这些typeshed存根呢?我的最后一招是简单地克隆typeshed回购,并将mypy指向它作为一个自定义类型的dir,但是我真的很想用正确的方式来做事情。
发布于 2022-02-10 13:52:18
尽管对于这个特定的实例,您可以只使用来自包本身的导入,但在某些情况下,您确实需要从typeshed导入类型来进行注释(在我的示例中,它试图使用StartResponse类型。
这些都是重要的,但只在像这样的if TYPE_CHECKING:块中:
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from _typeshed.wsgi import StartResponse
def application(environ: Dict, start_response: "StartResponse"):
# etc这只适用于排版目录中的类型(而且只应该是必需的)。
https://stackoverflow.com/questions/55520669
复制相似问题