如何从Cython源码(.pyx文件)自动生成.pyi文件?
从Cython .pyx文件自动生成.pyi接口定义文件的方法
嘿,我来分享几个社区里常用的实用方案,帮你高效生成.pyi类型提示文件:
方法一:使用Cython内置的生成功能(推荐,Cython 0.29+)
Cython从0.29版本开始支持直接生成.pyi文件,不需要额外第三方工具,步骤很简单:
确保安装了足够新的Cython
pip install --upgrade cython直接从命令行生成
针对单个.pyx文件,执行以下命令:cython -X generate_pyi=True your_module.pyx执行后会在同一目录下生成
your_module.pyi文件。集成到项目构建流程(setup.py)
如果你的项目用setup.py管理编译,可以在cythonize函数中添加编译指令,让每次编译时自动生成.pyi文件:from setuptools import setup from Cython.Build import cythonize setup( name="your_package", ext_modules=cythonize( "your_module.pyx", compiler_directives={"generate_pyi": True} # 开启pyi生成 ), )运行
python setup.py build_ext --inplace时,会同步生成对应的.pyi文件。
方法二:使用第三方工具cython-stubs
如果内置功能满足不了你的需求(比如处理更复杂的Cython语法),可以试试专门的 stub 生成工具cython-stubs:
安装工具
pip install cython-stubs生成stubs
直接针对.pyx文件执行:cython-stubs your_module.pyx它会生成包含详细类型提示的.pyi文件,对
cdef类、public函数等Cython特有结构的支持更细致。
方法三:自动生成+手动微调
不管用哪种自动工具,遇到复杂的Cython代码(比如涉及C语言指针、模板类、自定义扩展类型)时,自动生成的.pyi可能会有不准确的地方,这时候可以:
- 先用上述工具生成基础的.pyi文件
- 手动补充或修正类型提示,比如给
cdef public的函数添加正确的参数和返回类型,补全类的属性类型等
小贴士:如果你的Cython模块已经编译成了.so/.pyd文件,也可以用Python官方的
stubgen工具尝试生成,但效果通常不如直接从.pyx文件生成的好,因为stubgen只能从编译后的模块推断类型,丢失了原始.pyx里的细节。
内容的提问来源于stack exchange,提问作者tamuhey
相关产品推荐
相关产品推荐

