如何用C++扩展Python

How to extend Python with C++?

本文关键字:Python 扩展 C++ 何用      更新时间:2023-10-16

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

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

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

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

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

现在,我用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文件。现在我在使用这些文件时遇到了问题;如上所述,我需要传递变量。

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

然后你会做以下事情:

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

你现在应该可以做一些类似的事情了

t2c.addDataPoint(5,10)

在您的python代码中。