【问题标题】:Extending Python with a C++ shared object library using Cython使用 Cython 使用 C++ 共享对象库扩展 Python
【发布时间】:2011-01-29 19:03:50
【问题描述】:

所以基本上,我正在尝试用 Python 编写自己的 GUI 包装器(使用 GTK+,但我认为这无关紧要),用于使用 C++ 编写并由用户编译成共享对象文件的 API(在linux [*nix?我不太确定它在 Mac 上是如何工作的])或一个 dll(在 Windows 中),您应该能够参考以自己使用 API。经过一段时间的 Cython 尝试后,我可以编写自己的扩展,只要它只是一个文件,但我无法在网上找到任何关于使用多个文件的内容(因为这显然是,因为任何真正的项目将是)编译成单个 .so 可以导入到 Python 项目中。我是否需要手动通过并使用 Cython 并为每个 .cpp 文件(有很多)创建 .pyx 文件,将它们编译成 cpp 文件,然后编辑然后使用 make 文件将它们编译成 .so 文件,还是有更自动化的方法? (ps.我尝试用 Cython 分别编译每个文件,但它似乎不喜欢“#include ”符号,因此无法编译大部分文件)

其他信息:我已经能够使用 ctypes 与库进行交互,但这感觉非常hackish 和非pythonic,无论如何我想获得更多关于 Cython 的经验,因为它看起来可能非常有用资产。

【问题讨论】:

    标签: c++ python cython


    【解决方案1】:

    您可以创建一个名为“yourmodule.pyx”的文件,将所有其他文件重命名为 pxi,然后:

    include "other1.pxi"
    include "other2.pxi"
    

    那么你将只有一个文件需要 cythonize 和编译:yourmodule.pyx。

    【讨论】:

    • 这是个好主意。然而,我最终做的是创建一个仅与 .so 文件直接交互的 C++ 文件,然后将其包装到它自己的单独扩展中(一个唯一目的是与另一个扩展通信的扩展)。总的来说,它非常成功。不过还是谢谢。
    猜你喜欢
    • 1970-01-01
    • 2012-06-16
    • 2022-10-15
    • 2013-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多