Prerequisite: Using C codes in Python | Set 1
In the previous article, we have discussed how to access C code in Python. Now, let’s see how to access C functions.
Code #1 : Accessing C functions with Python
import work print ( "GCD : " , work.gcd( 35 , 42 )) print ( "\ndivide : " , work.divide( 42 , 8 )) print ( "\navg : " , work.avg([ 1 , 2 , 3 ])) p1 = work.Point( 1 , 2 ) p2 = work.Point( 4 , 5 ) print ( "\ndistance : " , work.distance(p1, p2)) |
Output :
GCD : 7 divide : (5, 2) avg : 2.0 distance : 4.242640687119285
Issue ?
Now the work done above has an issue that for the overall packaging of C and Python code together, using ctypes to access C code that has been compiled, one has to make sure that the shared library gets placed in a location, where the work.py
module can find it. One possibility is to put the resulting libsample.so
file in the same directory as the supporting Python code.
So, if the C library is installed elsewhere, then path has to be adjusted accordingly. If it is installed as a standard library on the machine, then ctypes.util.find_library()
function can be used.
Code #2 : Path Example
from ctypes.util import find_library find_library( 'm' ) find_library( 'pthread' ) find_library( 'sample' ) |
Output :
/usr/lib/libm.dylib /usr/lib/libpthread.dylib /usr/local/lib/libsample.so
Again, ctypes won’t work at all if it can’t locate the library with the C code. ctypes.cdll.LoadLibrary()
is used to load the C library, once it’s location is known.
_mod = ctypes.cdll.LoadLibrary(_path) |
Attention geek! Strengthen your foundations with the Python Programming Foundation Course and learn the basics.
To begin with, your interview preparations Enhance your Data Structures concepts with the Python DS Course.