파이썬, C 공유 라이브러리 이용
글. 수알치 오상문
[참고] https://www.youtube.com/watch?v=a65JdvOaygM
파이썬에서 C 언어로 만들어진 공유 라이브러리 함수를 이용하는 예입니다.
아래 예제 진행은 Ubuntu에서 테스트 되었습니다.
1. sudo apt-get install gcc <-- GCC 컴파일러 개발환경 설치!
2. sudo apt-get install python3-dev
sudo apt-get install python3.10-dev <-- 여기서는 버전 지정하여 설치했음
파이썬2는 python2-dev
--> Python.h 등 설치됨
3. C 언어 피보나치 함수 작성
-------------------------------------------
// myModule.c
#include <Python.h>
int Cfib(int n)
{
if (n < 2)
return n;
else
return Cfib(n-1) + Cfib(n-2);
}
static PyObject* fib(PyObject* self, PyObject* args)
{
int n;
if (!PyArg_ParseTuple(args, "i", &n)) // "i": int
return NULL;
return Py_BuildValue("i", Cfib(n));
}
static PyObject* version(PyObject* self)
{
return Py_BuildValue("s", "Version 1.0"); // "s": string
}
static PyMethodDef myMethods[] = {
{"fib", fib, METH_VARARGS, "Calculate the Fibonacci numbers."},
{"version", (PyCFunction)version, METH_NOARGS, "Returns the version."},
{NULL, NULL, 0, NULL}
};
static struct PyModuleDef myModule = {
PyModuleDef_HEAD_INIT,
"myModule", // name of module.
"Fibonacci Module",
-1,
myMethods
};
PyMODINIT_FUNC PyInit_myModule(void)
{
return PyModule_Create(&myModule);
}
-------------------------------------------
4. setup.py 작성하고 so(공유라이브러리) 파일로 빌드
-------------------------------------------
# setup.py
from distutils.core import setup, Extension
module = Extension('myModule', sources = ['myModule.c'])
setup (name = 'PackageName',
version = '1.0',
description = 'This is a package for myModule',
ext_modules = [module])
-------------------------------------------
>>> python3 setup.py build <-- GCC 빌드
성공하면 ./build/lib.linux-x86_64... 디렉터리에 *.so 파일이 생성됨.
myModule.cpython-310-x86_64-linux-gnu.so 파일을
test.py 위치로 복사한다.
5. 파이썬 테스트 파일(test.py) 작성 및 실행
-------------------------------------------
import myModule
print(myModule.fib(10))
print(myModule.version())
-------------------------------------------
>>> python3 test.py
55 <-- 성공!!!
Version 1.0
'Python 활용' 카테고리의 다른 글
파이썬에서 Go 함수 호출하기 (0) | 2023.10.30 |
---|---|
파이썬, ctypes 이용한 C 프로그램 호출 (0) | 2023.10.29 |
2023, 파이썬 유용한 라이브러리 (0) | 2023.10.25 |
Python + Cython 두 번째 글 (1) | 2023.10.13 |
파이썬에서 자바 패키지 및 사용자 자바 기능 호출 (0) | 2023.10.05 |