如何使用C ++扩展Python?

时间:2015-02-15 20:37:51

标签: python c++ wrapper swig

我有Python代码,它执行以下操作:

  1. 从模拟软件中获取优化问题。

  2. 使用多线程IPOPT算法解决此优化问题。

  3. 将2中获得的结果转换为另一个维度。

  4. 以图形的形式显示结果。

  5. 现在我用C ++写了一个类来解决优化问题(第2点)以提高速度和其他一些原因,它从第1点(问题,约束等)获取输出并给出一个输出进一步传递到第3点(Python中的一个函数)。

    如何将从1获得的这些变量传递给2中的C ++类,然后再传递回3中的Python函数?以下就是我的尝试:

    我使用SWIG来生成包装文件。 SWIG的接口文件,用于为2.cpp2.h C ++文件创建包装器:

    /* File: 2.i */
    %module t2c_main
    %{
    #define SWIG_FILE_WITH_INIT
    #include "../include/2.h"
    %}
    %include ../include/2.h
    

    运行SWIG后,我得到了一个Python文件和一个cxx文件。现在我在使用这些文件时遇到了问题;如上所述,我需要传递变量。

1 个答案:

答案 0 :(得分:0)

您如何准确传递变量显然取决于您如何存储数据。我们假设t2c_main模块包含一个方法addDataPoint(int,int);

您将采取以下措施:

  • 将生成的cpp文件与2.cpp一起编译并链接到动态库中。
  • 如果生成的python文件名为t2c.py,请将刚刚编译的动态库重命名为_t2c.pyd(注意下划线,这实际上很重要)。
  • 在python代码中导入t2c模块

您现在应该可以执行类似

的操作
t2c.addDataPoint(5,10)

在您的python代码中。