課題解決Tips

【Python】 pybind11を利用してPythonからC++の関数を利用する方法

salmoncode
記事内に商品プロモーション(Amazonアソシエイト含む)を含む場合があります。

こんにちは!エンジニアのサーモンです。

Pythonで開発しているときに困るシーンとして、利用したいライブラリがC++でしか提供されていないことがあります。

新しく入手したハードウェアを利用したいときなどですね。

その場合は有志が作ってくれているラッパーを利用しますが、それもないことがあります。

そんなとき、C++のライブラリを呼び出すにはどうすれば良いのでしょうか。

この記事では、PythonからC++の関数を呼び出す方法について紹介します。

この記事はこんな人におすすめ
  • C++のライブラリをPythonから利用したい人
  • C++ライブラリのラッパーを開発したい人
  • PythonのスクリプトをC++によって高速化したい人

ぜひ最後まで読んでいってください!

スポンサーリンク

PythonからC++を呼び出すにはPybind11を使う

PythonとC++を連携させるには、C++の関数をPythonにバインディングする必要があります。

バインディングツールはいくつかありますが、今回はpybind11を利用します。

このツールは機械学習ライブラリとして有名なpytorchにも使われているとのことなので、安心して利用できそうですね。

ちなみに、名前からしてC++11にしか対応してなさそうですが、C++14や17にも対応しているとのことでした。

pybind11の利用方法

pybind11はpipでインストールすることができます。

1pip install pybind11

PythonからC++関数の呼び出し

まずはC++の関数を定義し、Pythonから呼び出せるようにバインドします。

バインドには、pybind11から提供されるマクロを利用します。

1// C++ 
2void PrintFromNative(std::string text) {
3    std::cout << text << std::endl;
4}
5
6// バインド
7PYBIND11_MODULE(my_module, module) {
8    module.def("PrintFromNative", &PrintFromNative); // 関数のバインド
9}

Pythonからはマクロで指定したモジュール名でインポートすることができます。

1# Python
2import my_module
3
4# 関数の呼び出し
5my_module.PrintFromNative("Hello!!")

まとめ

この記事では、以下の内容について解説しました。

  • PythonからC++の関数を呼び出す方法

参考情報

参考書籍

pybind11について書かれた書籍は見つかりませんでした。

参考記事

公式ドキュメント

スポンサーリンク
ABOUT ME
サーモン
サーモン
著者(ソフトウェアエンジニア)
情報系大学院を卒業後、ソフトウェアエンジニアとして都内企業に従事。プログラミング歴は10年以上になります。
スポンサーリンク
記事URLをコピーしました