包装C++;使用python编写代码(手动)
我有一个主文件(main.cpp)和一个头文件(nodes.hpp)。主文件将N(任何正整数)作为输入参数,并使用头文件的函数给出输出,例如“x&y”(双精度) 注意:包装C++;使用python编写代码(手动),python,c++,wrapper,Python,C++,Wrapper,我有一个主文件(main.cpp)和一个头文件(nodes.hpp)。主文件将N(任何正整数)作为输入参数,并使用头文件的函数给出输出,例如“x&y”(双精度) 注意: 主文件和头文件都是用C++编写的。 主文件和头文件都使用特征库,而不是使用数据结构作为数组、向量 我必须为他们编写一个python包装器,我有python的实用知识,但从未使用过任何包装器 任何人都可以参考或给出一些关于使用python wrpper编写此类代码的说明吗 尝试使用官方文档: 此链接将为您提供如何包含cpp模块并
任何人都可以参考或给出一些关于使用python wrpper编写此类代码的说明吗 尝试使用官方文档: 此链接将为您提供如何包含cpp模块并从python解释器中使用它的简单示例,或者如果可能,请尝试使用Cython: Cython将允许您编写类似C、Python的代码,这些代码将被翻译为CPP编译,然后可以从Python轻松访问。您可以使用 或者使用Python
如果您已经设置了Boost,我建议您使用Boost.Python 使用Boost.Python。这是我的教程,前面是SO文档
使用Boost.Python
当Python项目中必须使用C++库时,事情就变得简单了。你可以使用Boost
首先,这里列出了您需要的组件:- 一个CMakeList.txt文件,因为您将要使用CMake
- python文件-这是您的python项目
cmake_minimum_required(VERSION 2.8.3)
FIND_PACKAGE(PythonInterp)
FIND_PACKAGE(PythonLibs)
FIND_PACKAGE(Boost COMPONENTS python)
INCLUDE_DIRECTORIES(${Boost_INCLUDE_DIRS} ${PYTHON_INCLUDE_DIRS})
PYTHON_ADD_MODULE(NativeLib CppProject)
FILE(COPY MyProject.py DESTINATION .) # See the whole tutorial to understand this line
通过本教程的这一部分,一切都很简单。您可以在python项目中导入库和调用方法。调用python项目MyProject.py
要运行项目,请遵循以下说明:
- 创建一个名为build的目录
- 进入那个目录
- 发出命令
cmake-DCMAKE\u BUILD\u TYPE=Release..
make
。现在,您必须看到C++项目中方法返回的字符串。python MyProject.py
- 您可以使用,其中它会自动创建必须通过您定义的接口文件使用ctypes创建的接口。人们说它很好,但是文档没有那么好
- 您可以使用,这很好,但它有一个非常丑陋的bjam构建系统。如果您能够设法绕过它,那么它甚至比ctypes更好。我是个超级助推器迷,但bjam是我不使用这个的原因
- 以下是您的选择:
我通常做的是ctypes。我相信它,因为它强调了。该库有一个与接口(C接口)分开的工作,它也与使用该接口的Python脚本分离,并向用户公开“简单的功能”。 < P> C++包生成的另一个工具是。谷歌于2017年发布了这一版本,目前它在所有方面都使用这一版本。我们不再允许在内部为Python编写新的SWIG包装器
它是在C++的基础上构建的C++解析,需要相对地道的现代C++ API使用(毫不奇怪的跟随),而不是任何尝试允许你通过SWIG的“支持一切糟糕”的方法在脚上开枪。其中还提到了一些你可以研究的第三方工具。其中一个最好、最现代的libs是(它每天都越来越流行)。没有太多的经验,除了cython,这是我唯一尝试过的,效果很好。Python通常被认为比SWIG和co更易于使用,但它受到Boost构建工具的限制。这是PybDun11摆脱的,如果你能够使用现代C++编译器!缺少#include boost/python.hpp
cmake_minimum_required(VERSION 2.8.3)
FIND_PACKAGE(PythonInterp)
FIND_PACKAGE(PythonLibs)
FIND_PACKAGE(Boost COMPONENTS python)
INCLUDE_DIRECTORIES(${Boost_INCLUDE_DIRS} ${PYTHON_INCLUDE_DIRS})
PYTHON_ADD_MODULE(NativeLib CppProject)
FILE(COPY MyProject.py DESTINATION .) # See the whole tutorial to understand this line
import NativeLib
print (NativeLib.getTryString)