使用Cython扩展Python与C++共享对象库
简单来说,我正在尝试用Python写一个自己的图形用户界面(GUI)包装器(我用的是GTK+,但我觉得这不是重点),这个包装器是为了一个用C++写的API。用户需要把这个API编译成一个共享对象文件(在Linux上[*nix?我不太确定在Mac上是怎么工作的])或者一个dll文件(在Windows上),然后你就可以引用它来使用这个API。经过一段时间的尝试,我用Cython写了自己的扩展,只要是单个文件就没问题,但我在网上找不到关于如何使用多个文件(显然这是个大项目)来编译成一个可以在Python项目中导入的单一.so文件的资料。我是不是需要手动逐个使用Cython,为每个.cpp文件创建.pyx文件(文件很多),然后把它们编译成cpp文件,再编辑这些文件,最后用make文件把它们编译成.so文件,还是有更自动化的方法?(顺便说一下,我尝试用Cython分别编译每个文件,但它似乎不喜欢“#include < path/file >”这种写法,所以大部分文件都没法编译)
其他信息:我已经能通过ctypes与这个库进行交互,但感觉这种方式非常不优雅,也不符合Python的风格。我还是想多练习一下Cython,因为这似乎是个非常有用的技能。
1 个回答
0
你可以创建一个名为 "yourmodule.pyx" 的文件,把其他所有文件的后缀改成 pxi,然后执行:
include "other1.pxi"
include "other2.pxi"
这样你就只需要处理一个文件来进行 Cython 编译和编译了:yourmodule.pyx。