You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从Cython源码(.pyx文件)自动生成.pyi文件?

从Cython .pyx文件自动生成.pyi接口定义文件的方法

嘿,我来分享几个社区里常用的实用方案,帮你高效生成.pyi类型提示文件:

方法一:使用Cython内置的生成功能(推荐,Cython 0.29+)

Cython从0.29版本开始支持直接生成.pyi文件,不需要额外第三方工具,步骤很简单:

  1. 确保安装了足够新的Cython

    pip install --upgrade cython
    
  2. 直接从命令行生成
    针对单个.pyx文件,执行以下命令:

    cython -X generate_pyi=True your_module.pyx
    

    执行后会在同一目录下生成your_module.pyi文件。

  3. 集成到项目构建流程(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:

  1. 安装工具

    pip install cython-stubs
    
  2. 生成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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:01:58