以下为授权转载的一盎司科技公众号文章
Cython是结合了Python和C的语法的一种语言,可以简单的认为是给Python加上了静态类型后的语法,是 Python 的一个超集,可以方便的编写C/C++拓展程序给Python使用。
下面将简单介绍使用Cython编写C++拓展程序供Python使用,关于Cython的详细内容可参考官方文档(https://cython.readthedocs.io/en/latest/index.html)。
环境
-
Windows操作系统:Windows10(21H2,19044.1766)
-
C++开发环境:Visual Studio 2022社区版
-
Python:3.10.4
-
Cython:3.0.0
安装Cython
首先可以使用命令pip install cython安装Cython,安装完成后可查看版本信息:
编写C++类
手动编写测试用的C++类Rect(rect.h,rect.cpp),如下所示:
编写C++测试程序
编写C++类测试程序,展示Rect类的使用,如下所示:
测试C++类
打开VS2022命令行工具编译测试程序,并查看结果,如下所示:
编写pxd文件
Cython中的pxd文件类似于C++头文件,描述C++类及其相关成员等基本信息。首先需要包含rect.h头文件,然后定义Rect类具体内容,其实就是C++类rect.h中的内容的改写:
编写pyx文件
Cython中的pyx文件类似于C++源代码cpp文件,描述了Rect类的具体实现方式:
需要说明的是,此处必须要定义一个新的类名,譬如PyRect,用于区分C++类Rect,否则生成可能报错重复定义。这里实际就是用C++的Rect类代理实现Python的PyRect类。
编写setup.py文件
setup.py文件是Python包的脚本文件,用于定义最终生成的Python包名,版本,特别是包依赖的源文件等:
生成Python包
直接使用命令python setup.py build编译生成最终包即可,最终会在build目录生成一个pyd为后缀的Python包文件:
编写Python测试程序
简单起见,先将生成的Python包文件python_cpp_demo.cp310-win_amd64.pyd(环境不同生成文件名可能有差异)拷贝到当前目录,然后编写测试程序main.py并执行:
自此,使用Cython编写一个C++拓展给Python使用的基本步骤就介绍完毕了,除了pxd,pyx文件略显陌生,其他应该是常规操作了。特别需要说明的是,此处会用到C++编译器,需要提前准备。