pybind11 — C++11 和 Python 之間的無縫操作
安裝工具範例 • Scikit-build 範例 • CMake 範例
pybind11是一個輕量級的純頭檔庫,它在 Python 中公開 C++ 類型,反之亦然,主要是為了創建現有 C++ 程式碼的 Python 綁定。它的目標和語法類似於 David Abrahams 的優秀 Boost.Python 函式庫:透過使用編譯時自省推斷類型資訊來最小化傳統擴充模組中的樣板程式碼。
Boost.Python 的主要問題以及創建此類類似專案的原因是 Boost。 Boost 是一套非常龐大且複雜的實用程式函式庫,幾乎可以與現有的所有 C++ 編譯器配合使用。這種相容性是有代價的:需要神秘的模板技巧和解決方法來支援最古老和最有缺陷的編譯器樣本。現在,相容於 C++11 的編譯器已廣泛使用,這種重型機器已成為過大且不必要的依賴項。
將此庫視為 Boost.Python 的一個小型獨立版本,其中剝離了與綁定生成無關的所有內容。如果沒有註釋,核心頭檔只需要約 4K 行程式碼,並依賴 Python(3.8+ 或 PyPy)和 C++ 標準函式庫。這種緊湊的實作得益於一些 C++11 語言功能(特別是:元組、lambda 函式和可變參數模板)。自創建以來,該程式庫在許多方面已經超越了 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、Johan Tomasz Miąsko、Dean Moldovan、Ben Pritchard、Jason Rhinelander、Boris Schäling、Pim Schellart、Henry Schreiner、Ivan Smirnov、Boris Staletic 和Patrick Stewart。
我們感謝 Google 為本計畫使用的持續整合基礎設施提供了慷慨的財政捐助。
有關構建和貢獻 pybind11 的信息,請參閱貢獻指南。
pybind11 是根據 BSD 風格的許可證提供的,可以在 LICENSE 文件中找到該許可證。透過使用、散佈或為本項目做出貢獻,您同意本授權的條款和條件。