在 C++ 基础知识中使用 Python
using python in c++ basics
谁能给我看一个在C ++程序中包含Python的基本程序? 我已经#include <Python.h>
工作了,但仅此而已。 如何创建一个字符串,int,并包含一个不属于 Python 库的模块?
也许主要的Python文档可以在这里提供帮助:http://docs.python.org/extending/
这是一个用 C 编写的简单模块: http://docs.python.org/extending/extending.html#a-simple-example
我建议使用Boost Python,因为你使用的是C++而不是C。 文档不错,但请注意,如果您的平台已经为其构建了 Boost 包,则可以跳过"Hello World"示例的大部分内容(因此您无需使用 bjam 自己构建 Boost)。
一定要使用Boost Python。它是一个轻量级依赖项(不需要更改现有的C++代码),尽管它确实略微增加了编译时间。
你可以在 ubuntu 上安装 boost python(或你平台的 pkg 管理器):
$ sudo apt-get install boost-python
那么一个简单的库看起来像这样:
#include <boost/python.hpp>
using namespace boost::python;
struct mystruct {
int value;
}
int myfunction(int i) {
return i + 1;
}
BOOST_PYTHON_MODULE(mymodule) {
// Code placed here will be executed when you do "import mymodule" in python
initialize_my_module();
// Declare my C++ data structures
class_<mystruct>("mystruct")
.def_readwrite("value", &mystruct::value)
;
// Declare my C++ functions
def("myfunction", myfunction);
}
然后编译
$ g++ -shared mymodule.cpp -I/usr/include/python -lboost_python -omymodule.so
最后,导入并在python中使用它
>>> import mymodule
>>> mymodule.myfunction(5)
6
>>> s = mymodule.mystruct()
>>> s.value = 4
>>> s.value
4
相关文章:
- 如何运行位于boost/libs/python/example/tutorial目录中的hello.cpp和Jamfil
- Pybind11:将元组列表从Python传递到C++
- 如何在c++中使用引用实现类似python的行为
- 是否可以通过C++扩展强制多个python进程共享同一内存
- 递归列出所有目录中的C++与Python与Ruby的性能
- IPC使用多个管道和分支进程来运行Python程序
- 从python中调用C++函数并获取返回值
- Python 3.7 和 excess_args 的 SWIG 问题
- Python中的for循环与C++有何不同
- 使用Pybind11向Python公开Eigen::张量
- Python str to C++ to Python str
- 如何使用Python从C++中读取谷物序列化数据
- 如何在C++中使用pybind11加载一个pickle python列表
- 如何在c++中使用system()来运行包含空格的python脚本
- python集合的C++等价物是什么.计数器
- 如果C++对象的类在另一个boost模块中声明,如何使用boost将指向该对象的指针返回到python
- 从python调用openMP共享库时,未定义opnMP函数
- 使用JsonCpp将数据返回到带有pybind11的python会在python调用中产生Symbol not foun
- 如何将真正的字符串从python c-api转换为python脚本
- Python ctype 'c_char_p' Memory Leak