Python은 생산성이 뛰어나지만, 고성능 연산에서는 C++에 비해 속도가 떨어집니다.
그럴 때 C++로 작성된 코드를 Python에서 직접 불러와 사용하는 기술,
바로 파이바인딩(Pybind)이 활약합니다.
Pybind는 C++ 코드를 Python 모듈 형태로 컴파일해주는 도구입니다.
이 과정을 거치면, C++로 작성된 함수를 마치 일반 파이썬 함수처럼 import하여 사용할 수 있습니다.
| 운영체제 | 생성 파일 확장자 | 설명 |
|---|---|---|
| Windows | .pyd | DLL과 동일한 동적 라이브러리로, Python에서 바로 import 가능 |
| Linux/macOS | .so | Shared Object 파일로, DLL과 같은 역할 수행 |
즉, C++ 소스(.cpp)를 컴파일하면 플랫폼별 동적 라이브러리(.pyd 또는 .so)가 생성되고,
이 파일을 Python 모듈처럼 바로 불러 쓸 수 있게 되는 것입니다.
Pybind를 사용하려면 다음 세 가지가 필요합니다.
C++ 컴파일러
바인딩 라이브러리
빌드 자동화 도구
setup.py 내에서 CMake를 호출하는 방식이 자주 쓰입니다.간단히 말해:
C++ 코드 + Pybind11 + 빌드도구 → 파이썬 모듈(.pyd/.so)
example.cpp)#include <pybind11/pybind11.h>
namespace py = pybind11;
int add(int i, int j) {
return i + j;
}
PYBIND11_MODULE(example, m) {
m.doc() = "pybind11 example plugin";
m.def("add", &add, "A function which adds two numbers");
}
이 코드는 add 함수를 Python에서 example.add()로 호출할 수 있도록 바인딩합니다.
setup.py)from setuptools import setup, Extension
import pybind11
cpp_args = ['-std=c++17']
module = Extension(
'example',
['example.cpp'],
include_dirs=[pybind11.get_include()],
language='cpp',
extra_compile_args=cpp_args,
)
setup(
name='example',
version='1.0',
description='A test project using pybind11',
ext_modules=[module],
)
패키지 설치
pip install pybind11 setuptools
컴파일 실행
python setup.py build_ext --inplace
빌드 후, 같은 폴더에 example.pyd(Windows) 또는 example.so(Linux/macOS)가 생성됩니다.
Python에서 실행
>>> import example
>>> example.add(5, 10)
15
>>> example.add(100, 200)
300
이렇게 C++로 작성한 함수를 Python 코드처럼 손쉽게 실행할 수 있습니다.
Pybind는 단순히 C++ 코드를 불러오는 기술이 아니라,
Python의 유연함과 C++의 성능을 결합하는 강력한 도구입니다.
수학 연산, 시뮬레이션, 3D 처리, AI 네트워크 연산 등
성능이 중요한 영역에서 Pybind11은 최적의 솔루션이 될 수 있습니다.