Repolode
pybind

pybind/pybind11

既存のC++コードにPythonバインディングを作成するための、C++の型や関数をPythonに公開するヘッダーオンリーのC++11ライブラリ。

スター
18,028
フォーク
2,331
未解決の Issue
716
最終コミット
13 時間前

これは何?

pybind11は、C++の型をPythonに公開するための軽量なヘッダーオンリーライブラリで、主に既存のC++コードにPythonバインディングを作成するために使われます。目標や構文はBoost.Pythonに似ていますが、Boostへの依存をなくし、Python C APIとC++標準ライブラリのみに依存します。また、C++11の機能を使ってコンパイル時に型情報を推論します。

このライブラリは、値・参照・ポインターでカスタム型を受け取ったり返したりする関数、メソッドや属性を持つクラス、オーバーロードされた関数、例外、列挙型、コールバック、イテレーター、継承、STLコンテナ、std::shared_ptrなど、一般的なC++の構成要素をPythonに対応付けます。仮想メソッドを持つC++クラスはPython側で拡張でき、NumPyとの連携も含まれています。CPython 3.9以降、PyPy、GraalPyに対応しています。

すべてが少数のヘッダーファイルに収まっているため、追加のリンクライブラリは不要です。READMEには、setuptools、scikit-build、CMakeを使ったパッケージング例も記載されています。

主な機能

  • 01ヘッダーオンリーのため、追加ライブラリのリンクが不要
  • 02クラス、オーバーロード、列挙型、例外、STLコンテナをPythonに対応付ける
  • 03仮想メソッドを持つC++クラスをPython側で拡張できる
  • 04NumPyとの連携とバッファプロトコルへのアクセスを統合
  • 05CPython 3.9以降、PyPy、GraalPyに対応

ユースケース

  • 既存のC++ライブラリをラップし、Pythonコードから呼び出せるようにする
  • 処理性能が重要なC++ルーチンをPythonスクリプトに公開する
  • コピーせずにC++コードとPythonの間でNumPy配列を受け渡す

クイックスタート

  1. 1

    README でリンクされている Setuptools のサンプルプロジェクトから始めてください

使う前に知っておきたいこと

  • C++11 に対応したコンパイラと、CPython 3.9 以降、PyPy、または GraalPy が必要です。

トピック

よくある質問

pybind11 とは?
既存のC++コードにPythonバインディングを作成するための、C++の型や関数をPythonに公開するヘッダーオンリーのC++11ライブラリ。 pybind11は、C++の型をPythonに公開するための軽量なヘッダーオンリーライブラリで、主に既存のC++コードにPythonバインディングを作成するために使われます。目標や構文はBoost.Pythonに似ていますが、Boostへの依存をなくし、Python C APIとC++標準ライブラリのみに依存します。また、C++11の機能を使ってコンパイル時に型情報を推論します。
pybind11 は無料で使えますか?ライセンスは?
pybind11 は Other ライセンスのオープンソースです。商用製品で使う前にライセンス条件を確認してください。
pybind11 は今もメンテナンスされていますか?
活発にメンテナンス中。pybind11 の最終コミットは 2026年10月24日 です。
pybind11 は何に使えますか?
既存のC++ライブラリをラップし、Pythonコードから呼び出せるようにする 処理性能が重要なC++ルーチンをPythonスクリプトに公開する コピーせずにC++コードとPythonの間でNumPy配列を受け渡す
pybind11 のインストール方法は?
README でリンクされている Setuptools のサンプルプロジェクトから始めてください
pybind11 はどこで入手できますか?
ソースコードとインストール手順は GitHub にあります:https://github.com/pybind/pybind11

概要はプロジェクトの README をもとに AI が生成しています。GitHub の数値は毎日更新されます。

関連プロジェクト