pybind11を使ってpythonで利用可能なc とeigenライブラリの開発 - sasaco/FEMPython GitHub Wiki

pybind11を使ってc++の共有ライブラリを作成し、Pythonから実行できる環境を提供する。
開発においてはVSCodeからPython, c++それぞれブレークポイントを指定してデバッグをする事ができる。

Requirement

Windowsローカルに下記アプリケーションがインストールされている事

  • WSL
  • Docker Desktop
  • VSCode

VSCodeの拡張機能DevContainersがインストールされている事 image

Installation

  1. zipファイルをローカルに展開(下記フォルダパスは一例)
C:\FEMPython
  1. WSLでDockerfileをbuild、runする
cd /mnt/c/FEMPython
docker build -t fem .
docker run --name fem -dit fem
  1. VSCodeでRemoteログインする
  • VSCodeの左下の緑色のボタンをクリック image
  • 出てきたメニューからAttach to Running Container...をクリック image
  • /fem を選択してコンテナ内にVSCodeで入る image

Usage

デバッグ方法

  1. /FEMPython/tests/test_001.py を開く
  2. 実行とデバッグをクリック
  3. Pythonもしくはc++を選択してデバッグ実行(F5を押した場合は直近選ばれていたデバッガが選択される)
  4. 指定したデバッガに対応するPythonコードもしくはc++コード内のブレークポイントでコード実行を一時停止できる image

Note

各ファイルの説明

  • Dockerfile
    • PythonとEigenをインストール
    • Pythonの仮想環境構築は今回見送り(複雑になるため)
    • Eigenはgit cloneのみ。コンパイル時に組み込むためbuildは不要

プログラム拡張時のメモ

  • cppファイルを共有ライブラリ(.so)に追加する際はMakefileのSRCSにファイル名を追加する事で、コンパイル、リンクができるようになる image
  • Python側で呼び出したいクラスがある場合は使用するメソッドを全てFileIO.cppファイルに書き込んでおく。ここに記載がないとc++側で定義していてもPython側で呼び出せない。 image
  • 共有ライブラリ名はコンパイルするファイル名と同じにする必要がある(この場合はFileIO.cpp) 変更する場合はMakefileのFileIOの記載を変更してコンパイル image
  • 今回は仮想環境に直接インストールしたPythonを使用したが、仮想環境を作成する場合はMakefileにPythonパスの指定が必要(今回未検証)
    参考URL:https://qiita.com/exy81/items/e309df7e33d4ff20a91a image