Products
96SEO 2025-08-28 21:10 1
Python提供了一个C API, 允许C/C++代码直接调用Python代码,或者让Python代码调用C/C++代码。
先说说 安装Python开发包:
sudo apt-get install python3-dev
然后创建一个C文件,比方说`my_module.c`:
/* my_module.c */
#include
static PyObject* add {
int a, b;
if ) {
return NULL;
}
return Py_BuildValue;
}
static PyMethodDef MyMethods = {
{"add", add, METH_VARARGS, "Add two numbers"},
{NULL, NULL, 0, NULL}
};
static struct PyModuleDef mymodule = {
PyModuleDef_HEAD_INIT,
"mymodule",
NULL,
-1,
MyMethods
};
PyMODINIT_FUNC PyInit_mymodule {
return PyModule_Create;
}
编译C++代码为Python模块:
g++ -fPIC -I/usr/include/python3.8 -o mymodule.so -shared $
然后在Python中使用这个模块:
import mymodule
result =
print # 输出 7
Cython是一种编程语言,它使得Python代码可以直接转换为C代码,从而可以与C++代码交互。
pip install cython
/* my_module.pyx */
cdef int add:
return a + b
接下来创建一个`setup.py`文件来编译Cython代码:
from setuptools import setup
from Cython.Build import cythonize
setup(
ext_modules=cythonize
)
编译Cython代码:
python setup.py build_ext --inplace
现在你可以在Python中导入并使用这个模块:
import my_module
result =
print # 输出 7
PyBind11是一个轻量级的头文件库,用于将C++代码暴露给Python。
先说说 安装PyBind11:
pip install pybind11
/* my_module.cpp */
#include
int add {
return i + j;
}
PYBIND11_MODULE {
m.doc = R"A Python module created by pybind11";
m.def;
}
g++ -O3 -Wall -shared -std=c++11 -fPIC $ -o example.pyd $
import example
result =
print # 输出 7
通过以上方法,你可以在Ubuntu系统中巧妙地让C与Python无缝互动。选择最适合你项目需求的方法,并遵循相应的步骤来确保成功集成。
Demand feedback