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 の小さな自己完結型バージョンと考えてください。コメントがなければ、コア ヘッダー ファイルに必要なコードは約 4,000 行だけで、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 によって提供されました。マビル、トマシュ・ミエンスコ、ディーン・モルドバン、ベンプリチャード、ジェイソン・ラインランダー、ボリス・シェーリング、ピム・シェラート、ヘンリー・シュライナー、イワン・スミルノフ、ボリス・スタレティック、パトリック・スチュワート。
このプロジェクトで使用される継続的インテグレーション インフラストラクチャに対して多大な資金提供をしていただいた Google に感謝いたします。
pybind11 の構築とコントリビュートについては、コントリビュート ガイドを参照してください。
pybind11 は、LICENSE ファイルにある BSD スタイルのライセンスに基づいて提供されます。このプロジェクトを使用、配布、または貢献すると、このライセンスの利用規約に同意したことになります。