C API from Extension Module in Python | Set 2
Last Updated :
27 Mar, 2019
Prerequisite: C API from Extension Module in Python | Set 1
Let’s see an example of a new extension module that loads and uses these API functions that we build up in the previous article.
Code #1 :
#include "pythonsample.h"
static PyObject *print_point(PyObject *self, PyObject *args)
{
PyObject *obj;
Point *p;
if (!PyArg_ParseTuple(args, "O" , &obj))
{
return NULL;
}
p = PyPoint_AsPoint(obj);
if (!p)
{
return NULL;
}
printf ( "%f %f\n" , p->x, p->y);
return Py_BuildValue( "" );
}
static PyMethodDef PtExampleMethods[] =
{
{ "print_point" , print_point, METH_VARARGS, "output a point" },
{ NULL, NULL, 0, NULL}
};
static struct PyModuleDef ptexamplemodule =
{
PyModuleDef_HEAD_INIT,
"ptexample" ,
"A module that imports an API" ,
-1,
PtExampleMethods
};
|
Code #2 : Module initialization function
PyMODINIT_FUNC
PyInit_ptexample( void )
{
PyObject *m;
m = PyModule_Create(&ptexamplemodule);
if (m == NULL)
return NULL;
if (!import_sample())
{
return NULL;
}
return m;
}
|
Now to compile this new module, one need not bother about how to link against any of the libraries or code from the other module. One can just simply use work.py
file as shown below.
Code #3 :
from distutils.core import setup, Extension
setup(name = 'ptexample' ,
ext_modules = [ Extension( 'ptexample' ,
[ 'ptexample.c' ], include_dirs = [], )])
|
After performing all this task, this new extension function works perfectly with the C API functions defined in the other module.
Code #4 : Using CPI API functions defined in the other module
import ptexample
import work
point1 = work.Point( 2 , 3 )
print ( "Point_1 : " , point1)
print ( "\n" , ptexample.print_point(p1))
|
Output :
Point_1 :
2.000000 3.000000
Share your thoughts in the comments
Please Login to comment...