使用 python 类型提示自动将 .py 文件转换为 .pyx [已关闭]

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

最近我必须将纯Python编写的模块转换为pyx,以便用cython进行编译。 从 py 转换为 pyx 的过程非常简单,因为所有变量和函数都有类型提示。所以这只是在 python 中查找每种类型的 cython 静态类型的问题。

考虑到原始代码中 Python 类型提示的使用,当前有哪些选项可用于自动将纯 Python 编写的模块转换为 Cython,特别是用于将 .py 文件转换为 .pyx 文件?是否有任何现有模块或工具可以促进此过程?如果否,理论上是否可以开发一个可以自动将 Python 类型提示转换为 Cython 静态类型的模块,如果可以,开发这样的模块可能会遇到哪些挑战?

python cython
1个回答
1
投票

Cython 已经使用 Python 类型注释,所以你很可能不需要做任何事情。

有一些小注意事项:

  • 最新的 Cython 3 alpha 版本比 0.29.x 分支对此有更好的支持(所以如果可以的话请升级),
  • 假定
  • int
    是 Python 对象而不是 C int,以避免大整数溢出并保持语义与 Python 相同。使用
    cython.int
    作为 C int 的注释。

“更多说明:”Cython 对于类型注释通常相当保守。它假设注释是正确的,但这并不是为了它的好处。因此,它不会做注释可能会改变答案的事情。

int
是主要示例 - Python 整数可以无限大,而 C 整数具有固定的最大值。因此,Cython 不会
int
注释更改为 C int,因为结果可能会改变。显然,如果您对潜在的不同行为感到满意,您可以自己进行更改。


如果您想自动化完全转换,那么内置

ast
模块可能是最简单的方法。为了简单起见,我仍然建议坚持使用“纯 Python 模式”,因为
ast
模块可以生成 Python 代码。但本质上,您要做的是创建一个查找注释的访问者(即
ast.AnnAssign
ast.Arg
)并将其替换为适当的 Cython 友好注释。然后,您可以使用
ast.dump
重写修改后的代码。

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