跨版本兼容的 ast 库
项目描述
AST 兼容
Python 标准库的向后兼容库ast
。
AST-Compat 有什么用?
-
构建 AST 的向后兼容性
例如,
ast.arguments
从 Python 3.8 开始更改,posonlyarg
引入了另一个字段,因此您应该从 Python 3.8 开始ast.arguments
使用附加参数构造一个,posonlyarg=...
如果您的代码是在 Python 3.8 之前编写的,它将不起作用。通过
ast_compat
,您不必担心新参数是可选的还是列表的问题。请注意,您应该使用
ast_compat.XXX
而不是ast.XXX
构造 AST。 -
在 Python 3.6 之前支持ast.Constant 。
ast.Constant
ast.Num
很方便,根据这个观察和改进,类似的东西是多余的: https ://bugs.python.org/issue32892但是,
ast.Constant
在 3.5 或更早版本中不可用,因此我们ast.Constant
在此库中进行反向移植。要以兼容的方式访问 的内容
ast.Constant
,请使用ast_compat.get_constant
而不是.value
. -
支持使用ast_compat.unparse将 AST 转储为字符串,同步 CPython 官方 repo 提供的工具代码。
用法
import ast_compat as astc
from ast_compat import get_constant
assert get_constant(astc.Constant((1, 2))) == (1, 2)
empty_args = astc.arguments() # work for all of Python 3.5-3.11
实施和重建
兼容性遵循 Python AST 的规范,即您可以在以下位置找到的 ADSL 文件
https://github.com/python/cpython/blob/<branch/tag>/Parser/Python.asdl
.
我们解析文件,并生成验证和默认参数工厂,检查ast_compat/compat3k*_{ast|unparse}.py
. 解释一下,ast_compat/compat3k5_*.py
适用于 Python 3.5,ast_compat/compat3k9_*.py
适用于 Python 3.9。
生成器的文件是generate_ast_compat.py
,生成器API的使用是这样的:
from generate_ast_compat import compat
compat((3, 5)) # generate ast_compat/compat3k5_ast.py and ast_compat/compat3k5_unparse.py
compat((3, 6))
compat((3, 7))
compat((3, 8))
prerelease_url = "https://raw.githubusercontent.com/python/cpython/v3.9.0a3/parser/python.asdl"
compat((3, 9), prerelease_url)
代码生成需要 Python 3.7+,尽管这个库适用于 Python 3.5 和 3.5+。
项目详情
ast_compat -0.11.1-py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | e4ea8ad1c5a183f8307b5e04ea509afb40cb9eaca3ce10c1d5c0be3e8acf5064 |
|
MD5 | 8f1d8439beb72e36d4ab0b4378e8125d |
|
布莱克2-256 | 79aad668c2b32c842e9b4965281e81899bddb6aa89ce3436a3491bc4c44e6b6b |