CPython이 개발자에게 제공하는 흥미로운 기능은 C 코드와 Python의 인터페이스 용이성 입니다. 개발자가 Python 코드에서 C 함수를 호출하는 데 사용하는 세 가지 주요 방법은 ctypes, SWIG 및 Python / C API가 있습니다. 각 방법마다 장점과 단점이 있습니다.

먼저 왜 C와 파이썬을 연결하고 싶습니까?

그렇다면 C라이브러리를 파이썬과 연결하는 방법을 알아봅시다.

CTypes

Python ctypes 모듈은 Python에서 C 함수를 호출하는 가장 쉬운 방법중 하나입니다. ctypes 모듈은 DLL을 로드하기 위한 C 호환 데이터 유형 및 함수를 제공하므로 수정할 필요없이 C 공유 라이브러리를 호출 할 수 있습니다.

간단한 정수를 두 수를 더하는 간단한 C코드를 작성해봅시다. add.c로 저장합니다.

add.c

//2개의 수를 더하는 C 샘플 코드 - int and floats
#include <stdio.h>

int add_int(int, int);
float add_float(float, float);

int add_int(int num1, int num2){
    return num1 + num2;
}

다음으로 C 파일을 .so 파일 (Windows의 DLL)로 컴파일합니다. 그러면 adder.so 파일이 생성됩니다.

for Linux

$  gcc -shared -Wl,-soname,adder -o adder.so -fPIC add.c

for Mac

$ gcc -shared -Wl,-install_name,adder.so -o adder.so -fPIC add.c

이제 파이썬 코드를 작성합니다.

add.python

from ctypes import *

#load the shared object file
adder = CDLL('./adder.so')

#Find sum of integers
res_int = adder.add_int(4,5)
print "Sum of 4 and 5 = " + str(res_int)

출력 결과는 다음과 같습니다.

output:

Sum of 4 and 5 = 9
Sum of 5.5 and 4.1 =  9.60000038147

이 예제의 C파일은 설명이 필요 없습니다.

두 개의 함수를 가지고 있고, 하나는 두 개의 정수를 더하고 다른 하나는 실수형을 더 합니다. 파이썬 파일에서는 먼저 ctypes 모듈을 가져옵니다. 그리고 ctypes모듈의 CDLL 함수가 우리가 생성한 공유 라이브러리 파일을 읽기 위해 사용 됩니다. 이제 C라이브러리안에 정의된 함수들을 adder 변수를 통해서 사용할 수 있습니다. adder.add_int()가 호출 되면 내부적으로 add_int C 함수가 호출됩니다. ctypes 인터페이스를 사용하면 기본적으로 C 함수를 호출하는 동안 네이티브 파이썬 정수 및 문자열을 사용할 수 있습니다.


Comments

Eungbean Lee's Picture

About Eungbean Lee

Lee is a Student, Programmer, Engineer, Designer and a DJ

Seoul, South Korea https://eungbean.github.io