Skip to main content

跨版本兼容的 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.Constantast.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 (45.2 kB 查看哈希

已上传 py3