pybind11 — C++11과 Python 간의 원활한 작동성
Setuptools 예시 • Scikit-build 예시 • CMake 예시
pybind11 은 주로 기존 C++ 코드의 Python 바인딩을 생성하기 위해 Python에서 C++ 유형을 노출하고 그 반대로 노출하는 경량 헤더 전용 라이브러리입니다. 목표와 구문은 David Abrahams의 우수한 Boost.Python 라이브러리와 유사합니다. 즉, 컴파일 시간 내부 검사를 사용하여 유형 정보를 추론하여 기존 확장 모듈의 상용구 코드를 최소화합니다.
Boost.Python의 주요 문제이자 유사한 프로젝트를 만드는 이유는 Boost입니다. Boost는 현존하는 거의 모든 C++ 컴파일러에서 작동하는 엄청나게 크고 복잡한 유틸리티 라이브러리 모음입니다. 이러한 호환성에는 비용이 듭니다. 가장 오래되고 버그가 많은 컴파일러 표본을 지원하려면 난해한 템플릿 트릭과 해결 방법이 필요합니다. 이제 C++11 호환 컴파일러가 널리 사용 가능해지면서 이 중장비는 지나치게 크고 불필요한 종속성이 되었습니다.
이 라이브러리를 바인딩 생성과 관련되지 않은 모든 것을 제거한 작은 독립형 Boost.Python 버전으로 생각하세요. 주석이 없으면 핵심 헤더 파일에는 ~4K 줄의 코드만 필요하며 Python(3.8+ 또는 PyPy) 및 C++ 표준 라이브러리에 의존합니다. 이러한 간결한 구현은 일부 C++11 언어 기능(구체적으로: 튜플, 람다 함수 및 가변 템플릿) 덕분에 가능했습니다. 이 라이브러리는 생성된 이후 여러 면에서 Boost.Python을 넘어 성장하여 여러 일반적인 상황에서 바인딩 코드가 훨씬 더 단순해졌습니다.
튜토리얼과 참조 문서는 pybind11.readthedocs.io에서 제공됩니다. PDF 버전의 매뉴얼은 여기에서 보실 수 있습니다. 소스 코드는 항상 github.com/pybind/pybind11에서 확인할 수 있습니다.
pybind11은 다음 핵심 C++ 기능을 Python에 매핑할 수 있습니다.
std::shared_ptr
과 같은 참조 카운팅 기능을 갖춘 스마트 포인터핵심 기능 외에도 pybind11은 몇 가지 추가 기능을 제공합니다.
constexpr
사용) 더 작은 바이너리로 이어집니다.이 프로젝트는 Wenzel Jakob이 만들었습니다. 코드의 중요한 기능 및/또는 개선 사항은 Jonas Adler, Lori A. Burns, Sylvain Corlay, Eric Cousineau, Aaron Gokaslan, Ralf Grosse-Kunstleve, Trent Houliston, Axel Huebl, @hulucc, Yannick Jadoul, Sergey Lyskov, Johan이 기여했습니다. Mabille, Tomasz Miąsko, Dean Moldovan, 벤 프리처드, 제이슨 Rhinelander, Boris Schäling, Pim Schellart, Henry Schreiner, Ivan Smirnov, Boris Staletic 및 Patrick Stewart.
이 프로젝트에 사용되는 지속적인 통합 인프라에 대한 재정적 기여에 대해 Google에 감사드립니다.
pybind11을 구축하고 기여하는 방법에 대한 정보는 기여 가이드를 참조하세요.
pybind11은 LICENSE 파일에서 찾을 수 있는 BSD 스타일 라이센스에 따라 제공됩니다. 이 프로젝트를 사용, 배포 또는 기여함으로써 귀하는 본 라이센스의 이용 약관에 동의하게 됩니다.