본문 바로가기

Langauge/Python

[Python] Python과 C++ 연동

728x90
반응형

Python은 동작할 때, 컴파일러를 통해 바이트 코드로 변환되어 PVM을 통해 실행된다. 

이러한 특징 때문에 빠른 속도를 요구하는 프로그램 작성시 상대적으로 느린 속도를 보인다. 

속도 개선을 위해 다양한 방법을 적용할 수 있지만 OpenCV-Python을 사용한 연산에서는 Numba 같은 라이브러리를 지원하지 않기 때문에 어렵다.

 

이러한 문제를 해결하기 위해 C++로 코드를 작성하고 Python에서 함수 처럼 사용할 수 있도록 하는 pybind11이 나왔다.

pybind11은 Python의 C API를 기반으로 한다.

 

주요 특징은 다음과 같다.

  • 간변한 바인딩 : C++ 함수와 클래스를 Python에서 사용할 수 있도록 쉽게 바인딩할 수 있다. C API를 직접 다루지 않아도 된다.
  • 자동 타입 변환 : C++, Python 간의 데이터 타입 변환을 자동으로 처리한다. 예를 들어 Python의 리스트를 C++ std:vector로 Python의 Dictionary를 C++의 std:map으로 변환된다.
  • 모듈화 : C++ 코드를 Python 모듈로 쉽게 컴파일 할 수 있다. 이를 통해 C++로 작성된 고성능 코드를 Python에서 직접 호출할 수 있다.
  • 예외 처리 : C++에서 발생하는 예외를 Python 예외로 변환하여 Python 코드에서 쉽게 처리할 수 있도록 지원한다.
  • Numpy와의 통합 : Numpy 배열과 상호작용을 지원하며, C++에서 Numpy 배열을 쉽게 다룰 수 있다.

 

 

GitHub - pybind/pybind11: Seamless operability between C++11 and Python

Seamless operability between C++11 and Python. Contribute to pybind/pybind11 development by creating an account on GitHub.

github.com

 

 

728x90
반응형