如何用C++扩展Python
How to extend Python with C++?
我有Python代码,它可以执行以下操作:
-
从模拟软件获取优化问题。
-
使用多线程IPOPT算法解决了这个优化问题。
-
将在2中获得的结果转换为另一个维度。
-
以图形形式显示结果。
现在,我用C++编写了一个类来解决优化问题(第2点),以提高速度和其他一些原因,它从第1点(问题、约束等)获得输出,并给出一个输出,该输出进一步传递到第3点(Python中的一个函数)。
如何将从1中获得的这些变量传递到2中的C++类,然后再传递回3中的Python函数?以下是我正在尝试的:
我使用SWIG来生成包装文件。SWIG为2.cpp
和2.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代码中。
相关文章:
- C++返回 Numpy 数组的 Python 扩展模块
- 我应该包含什么来制作 boost.python 扩展?
- 通过Python Distutils(用于Python C扩展)使用可重定位的设备代码编译CUDA代码
- Python & C-C++ 扩展模块案例段故障
- 带有CMake和SetupTools的Python 2.7 C++扩展
- Python 和 C++ (Pybind11):Python 扩展模块导入错误
- Python 扩展中错误,C++ 中的 SFML
- 在 Linux 上从 Visual Studio Code 调试 Python C++ 扩展
- 在Windows元组上构建64位Python扩展:未声明的标识符
- 在用 C++ 编写的 Python 3 扩展中,如何将 wstring 对象传递给 Python 代码
- 如何改进 Python C 扩展文件行读取
- 编译 PythonService.cpp来自 win32 Python 扩展构建
- 如何修复"UnicodeDecodeError:"utf-8"编解码器无法解码字节时使用Python C扩展?
- 如何使用纯Python扩展API(Python3)包裹C 对象
- Python 扩展:对 C 部分和 C++ 部分使用不同的编译器标志
- 如何导入或安装预构建的Python扩展模块(C )(即未通过Setuptools编译的库)
- 基于python版本的C++python扩展的输出差异
- Python C++扩展 - 内存泄漏或访问冲突
- Python 扩展方法的分段错误
- 如何在通过python扩展访问的C++库中捕获AddressSanitizer引发的错误