lxml 的类型提示?

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

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

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

python-3.x types lxml mypy lxml.html
3个回答
13
投票

现在有一个

lxml
的官方存根包,现在称为
lxml-stubs

$ pip install lxml-stubs

但是请注意,存根仍在开发中,尚未 100% 完成(尽管根据我的经验非常有用)。这些存根曾经是

typeshed
的一部分,然后在删除后由 Jelle Zijlstra 策划,现在作为
lxml
项目的一部分进行开发。

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

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

(该项目的自述安装命令在 URL 的方案中缺少

git+
前缀,将无法工作)。


2
投票

欢迎 check out types-lxml 如果任何后来者仍然感兴趣。这些年来我做了很多填补空白的工作,所以现在可以认为所有主要子模块都已完成:

lxml.etree
lxml.html
lxml.objectify
。 2023 年 3 月之后的下一个版本应该涵盖除
lxml.isoschematron
之外的所有内容,它具有非常强大的模式验证,但很少有人会使用它。

我已经使用

stubgen
创建存根类型定义并填写“任何”类型

如果不是lxml,这实际上是正确的做法;从

mypy
创建模板
stubgen
是许多存根文件的起点。但是lxml主要是用Cython写的,stubgen目前还没有完善的支持。此外,正如 OP 所指出的,这是一个 python 2.0 时代的模块,作者以一种非常多态的方式使用函数参数。注释 lxml 有很多独特的挑战,因为 lxml 本质上是
libxml
libxslt
的 python 接口。

例如,

unicode
bytes
输入的支持也使事情复杂化;这与注释与 python 捆绑在一起的
xml.etree
时发现的困难相同,但幅度要大得多。

[免责声明:我是上述

types-lxml
包的维护者]


1
投票

我不会称之为“hacky”,而是gradual typing.

您可以仔细查看 lxml-stubs 存储库。来自:

此存储库包含 lxml 包的外部类型注释(参见 PEP 484)。此类类型注释通常包含在 typeshed 中,但 lxml 的注释经常出现问题,因此已从 typeshed 中删除。特别是存根不完整,很难提供完整的存根。

也许对你有用

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