Python

Python Ctypes

“The python Ctypes module will be reviewed in this article. While implementing Python code, we will usually feel the requirement to include methods that were possibly created in another domain. One of the most frequent reasons for this is that Python is slower than other programming languages such as C or C++. Performance can be greatly enhanced by carrying out complex calculations in a quick and efficient language.”

In reality, some Python modules, like NumPy as well as OpenCV, make use of C or C++ capabilities. The Python Ctypes module makes it feasible for the users to integrate modules like this and employ their methods.

To discuss managing the storage in Ctypes, a couple of procedures can serve as its foundation. The fact that users don’t have to spend more time managing the data storage has been one of the best aspects of switching from C language to Python language. The language which acquires the storage immediately must release it while using Ctypes or any other technique. We’ll also show how to load a C library and call its functions.

We will execute a variety of codes on Ubuntu 20.04 in this article. Before entering the commands, we first access the terminal.

We will run the command $ nano sum.c. The keyword “nano” is being used to open the required file. Here we have to open the sum.c file.

$ nano sum.c

The file of nano sum.c will be successfully opened by running the above command. Before anything else, we’ll build up our_function (). We have given this function two parameters, which include “num_numbers” and a pointer. The argument “num_numbers” represents the total numbers we have, and the pointer parameter points to the number.

In the next step, we initialize the variable “I”. We declare a variable “sum” and set it to be 0. Further, we will utilize the “for” loop. We will iterate over every value from i=0 until the value of loop variable “I” is less than num_numbers. In the last portion of the “for” loop, we do incrimination in the value of “I” by 1. Within the “for” loop, we will add the numbers[i] to the “sum” variable. In the end, we have been using the return statement. This returns the sum value. The preceding image shows the file’s source code.

We will tap Ctrl+X to quit the sum.c file. Now once again, we open the terminal. Let’s start utilizing Ctypes to integrate a simple module with only one method into the Python script. However, we cannot associate a standard .c file. The command can be used to create a standard package, which is what we need to do.

So, we have entered the command cc –fPIC –shared –o libsum.so from the sum.c. We assigned the extension .c to the file. Any name will be used to give the file name but keep the extensions in consideration while utilizing this command.

In the step, we will execute the command “dir” to open the directory “libsum.so sum.c”.

$ dir

After opening the directory, we will create a new file termed test.py. nano would be applied to open that file.

$ nano test.py

After opening the test.py file, we start the coding. Ctypes must be integrated into the code at the start. Then we create a variable “sum”, which comes by the Ctypes.CDLL(“./libsum.so”). We have to be careful about the data appropriately; Ctypes enable the users to import a standard library and retrieve functions explicitly from that as well. This requires that the program is being called within the same path as the standard library and that they are both located here already. When we incorporate the .py file with the standard library, there have been several Operating system specifications regarding library search directories.

Further, we call the function sum.ourfunction.argrtpes. We set the value of this function as ctypes.c_int, ctypes.POINTER(ctypes.c_int). Then we define our_function(). We have provided the numbers as its arguments. We create a global variable termed _sum. We declare a variable num_numbers. Within this variable, we have to find out the length of the defined numbers, so we will be using the len() method. We create an array. This array is stored in a variable “array_type”. We specify the value as ctypes.c_int * num_numbers to the variable array_type.

Now we initialize a new variable, “result”. Here we call the function sum.our_function(stypes.c_int(num_numbers). similarly, we provide the pointer of the number (*numb) to the array_type statement. To terminate the code, we type the return statement. Within this function, we pass a variable “result” as its parameter. The data type of the result variable is an integer. The preceding image shows the file’s source code.

We will use this to run the program from any file. After the library has been imported, this will be saved in a Python attribute containing procedures for every defined module.

Let’s rename the test.py file with the sum.py file.

$ mv test.py sum.py

We will create a new file, “test.py”, and then it will be opened by using the nano keyword before the file name.

$ nano test.py

The test.py file will be opened. Now we will import the sum. In the next line, we call the print() function. Within this function we call the method sum.our_function(). The our_function() contains the first five numerical values as its arguments. The preceding image shows the file’s source code.

Text Description automatically generated

Here we will run the file “test.py”. We write the command $ python3 test.py. This command will be executed, and the result will be shown on the terminal.

$ python3 test.py

Conclusion

How to use Python’s Ctypes has been covered in this article. We run the commands on Ubuntu 20.04. We have created and opened a “sum.c” file with the help of the nano term. In this file, we have constructed our_function(), and then we have been defining our_function. Next, we open the test.py file. Within this file, we can call our_function() and then utilize this function.

About the author

Kalsoom Bibi

Hello, I am a freelance writer and usually write for Linux and other technology related content