c++과 연결하는 것인데, header only library이고,
아래 페이지가 해당 사이트이다.
https://github.com/pybind/pybind11
기존에는 ctype등을 이용해서 주로 python과 C를 연결했었는데,
이것은 C++과 다이렉트로 연결해주는 패키지이다.
이전에도 C++은 python과 바로 연결은 안되고, extern이라든지 c형태로 함수를 다시 재구성해서 노출시키는 방법들을 사용했었는데, 이것은 간단한 작성으로 이런것들을 가능하게 해주는듯하다.
이전에 Boost.Python이 그런역할을 해주는데, 부스트라는게 사실 좀 헤비한 면이 없지 않은지라 header only에 standard c++만 사용한 이 패키지도 나쁘지는 않은듯하다.
먼저 pybind설치
>> pip install pybind11
아래와 같이 c-code를 작성한다. example.cpp
#include <pybind11/pybind11.h>
int add(int i, int j) {
return i + j;
}
namespace py = pybind11;
PYBIND11_MODULE(example, m) {
m.doc() = "pybind11 example plugin"; // 모듈 독스트링 설정
m.def("add", &add, "A function which adds two numbers"); // 함수 바인딩
}
이것을 다음과 같이 컴파일 header-only이기때문에 python3 -m pybind11 --includes
이 명령어를 통해서 관련 헤더가 추가된다.
c++ -O3 -Wall -shared -std=c++11 -fPIC `python3 -m pybind11 --includes` example.cpp -o example`python3-config --extension-suffix`
아래와 같이 python 에서 불러들이면 끝
import example
result = example.add(1, 2)
print(result)
# 출력: 3
위와 같이 간단하게 python에서 c-code를 실행시키는 코드를 만들수 있다.
댓글 없음:
댓글 쓰기