Level : WORDPRESS BOOK LINKEDIN PATENT Send Mail 동냥하기 hajunho.com

반응형


### 1. Python/C API

Python/C API는 가장 기본적인 방법으로, Python 인터프리터에 직접 접근할 수 있습니다. 이 방법은 매우 유연하고 강력하지만, 상대적으로 복잡하고 오류가 발생할 가능성이 있습니다.

#### 간단한 예제:

1. **Python 함수 호출 (C 코드):**

```cpp
#include <Python.h>

int main() {
    Py_Initialize();
    PyObject *pName, *pModule, *pFunc;
    PyObject *pArgs, *pValue;

    pName = PyUnicode_DecodeFSDefault("my_python_script");
    pModule = PyImport_Import(pName);
    Py_DECREF(pName);

    if (pModule != NULL) {
        pFunc = PyObject_GetAttrString(pModule, "my_function");
        if (PyCallable_Check(pFunc)) {
            pArgs = PyTuple_Pack(1, PyLong_FromLong(42));
            pValue = PyObject_CallObject(pFunc, pArgs);
            Py_DECREF(pArgs);
            if (pValue != NULL) {
                printf("Result: %ld\n", PyLong_AsLong(pValue));
                Py_DECREF(pValue);
            }
            else {
                PyErr_Print();
            }
        }
        Py_XDECREF(pFunc);
        Py_DECREF(pModule);
    }
    else {
        PyErr_Print();
    }

    Py_Finalize();
    return 0;
}
```

2. **my_python_script.py 파일:**

```python
def my_function(x):
    return x * 2
```

### 2. SWIG (Simplified Wrapper and Interface Generator)

SWIG는 다양한 언어(특히 C++와 Python) 간의 인터페이스를 자동으로 생성해주는 도구입니다. 이를 통해 C++ 코드를 Python에서 사용할 수 있습니다.

#### 간단한 예제:

1. **인터페이스 파일 (example.i):**

```swig
%module example
%{
    #include "example.h"
%}

extern int add(int a, int b);
```

2. **C++ 코드 (example.cpp):**

```cpp
#include "example.h"

int add(int a, int b) {
    return a + b;
}
```

3. **헤더 파일 (example.h):**

```cpp
int add(int a, int b);
```

4. **SWIG 명령어 및 빌드:**

```sh
swig -python -c++ example.i
g++ -shared -o _example.so example_wrap.cxx example.cpp -I/usr/include/python3.8
```

5. **Python에서 사용:**

```python
import example
print(example.add(2, 3))  # Output: 5
```

### 3. ctypes

Python의 `ctypes` 라이브러리는 C로 작성된 작업을 직접 호출할 수 있습니다. 이를 통해 컴파일된 동적 라이브러리(.so, .dll)를 직접 로드하고 함수 호출을 할 수 있습니다.

#### 간단한 예제:

1. **C 코드 (my_c_code.c):**

```c
#include <stdio.h>

void my_function(int n) {
    printf("Number is: %d\n", n);
}
```

2. **컴파일:**

```sh
gcc -shared -o my_c_code.so -fPIC my_c_code.c
```

3. **Python 코드:**

```python
from ctypes import CDLL

my_c_code = CDLL('./my_c_code.so')
my_c_code.my_function(42)  # Output: Number is: 42
```

### 4. Cython

Cython은 Python 코드를 C로 컴파일하여 성능을 개선할 수 있는 강력한 도구입니다. 이는 C/C++ 코드를 Python 코드에 직접 통합할 수 있는 간편한 방법을 제공합니다.

#### 간단한 예제:

1. **Cython 파일 (example.pyx):**

```cython
cdef extern from "example.h":
    int add(int a, int b)

def py_add(int a, int b):
    return add(a, b)
```

2. **setup.py 파일:**

```python
from setuptools import setup, Extension
from Cython.Build import cythonize

setup(
    ext_modules = cythonize(Extension(
        "example",  # module name
        sources=["example.pyx", "example.cpp"],  # source files
        language="c++"
    ))
)
```

 


구글 검색에 잘 노출 되도록 작업

 

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기