键入 lxml 的提示?

Type hints for lxml?

Python 的新手,具有静态类型语言背景。我想要 https://lxml.de 的类型提示只是为了便于开发(mypy 标记问题和建议方法会很好!)

据我所知,这是一个 python 2.0 模块,没有类型。目前我已经使用 https://mypy.readthedocs.io/en/stable/stubgen.html 创建存根类型定义并填写我正在使用的“任何”类型以及更多信息,但它 真的 很老套。有没有更安全的方法来获取类型提示?

我不会称之为“hacky”,而是 gradual typing. You can take a closer look at lxml-stubs repository。来自:

This repository contains external type annotations (see PEP 484) for the lxml package. Such type annotations are normally included in typeshed, but lxml's annotations were frequently problematic and have therefore been deleted from typeshed. In particular, the stubs are incomplete and it has been difficult to provide complete stubs.

也许对你有用

lxml 有一个官方存根包,现在称为 lxml-stubs:

$ pip install lxml-stubs

但是请注意,存根仍在开发中,尚未 100% 完成(尽管根据我的经验非常有用)。这些存根曾经是 typeshed 的一部分,然后在删除后由 Jelle Zijlstra 策划,现在作为 lxml 项目的一部分进行开发。

如果你想要存根的开发版本,通过

安装
$ pip install git+https://github.com/lxml/lxml-stubs.git

(该项目的自述文件安装命令在 URL 的方案中缺少 git+ 前缀,因此无法使用。

最近我在 lxml-stubs 的基础上做了更多的填充工作,取得了一些不错的进展。

欢迎来到 check out types-lxml 如果任何后来者仍然感兴趣。对于大多数人来说,我认为 lxml.objectify 是存根中唯一缺少的部分,它是在当前版本发布后立即计划的。

I’ve used stubgen to create stub type definitions and filling in “any”-types

如果不是 lxml,这实际上是正确的方法;从 mypy stubgen 创建模板是许多存根文件的起点。但是lxml大多是用Cython写的,stubgen目前还没有完善的支持。除了 OP 指出的,这是一个 python 2.0 时代的模块,作者以一种非常多态的方式使用函数参数。注释 lxml 有很多独特的挑战,因为 lxml 本质上是 libxmllibxslt 核心的 python 接口。

例如,unicodebytes 输入的支持也使事情变得复杂;这与注释 xml.etree 与 python 捆绑时发现的困难相同,但幅度更大。