cppyyを利用して外部ライブラリを簡単にPythonで利用

cppyy 入門

1 概要

  • PythonからC++やCと連携するのが非常に楽に出来るパッケージ
  • C++やCのインタプリタ、CERNのROOTの技術を利用しているようだ
  • 色々あった、既存のPythonとの連携ツールは、ソースを改造したり、追加のソースが必要となったが、これはほぼ無しで動く

3 インストールと、基本的使い方

3.1 以下の操作を行っている動画

3.2 ローカルにインストールする手順

  • Ubuntuじゃなければpip3のかわりにpipを利用して pip install cppyy でローカルにインストール可能
  • 必要なパッケージ、ツールがあると思われる
  • ipythonか、Jupyter Notebookをいれとくと、試しやすいし、プログラムする時に便利(私は軽いIpythonをいれてます)
pip3 install cppyy

3.3 テスト

import cppyy
# include
cppyy.include("string")
# std::vector 利用
v=cppyy.gbl.std.vector['std::string']()
v.push_back("hello")
# vのタイプ表示
print(type(v))
# std::vectorの要素表示
print(v.size())                                                                                                                               
print(v[0])  
# 独自関数定義
cppyy.cppdef('void myprint(std::string s) {std::cout << s << std::endl;};')   
# 独自関数利用
cppyy.gbl.myprint(v[0])
cppyy.gbl.myprint(cppyy.gbl.std.string("World"))         
cppyy.gbl.myprint("World")         
# lowlevel ライブラリ
import cppyy.ll

3.4 この章のまとめ

  • 基本的な使い方の説明を行った
    • include
    • std::vectorの利用
    • std::stringの利用
    • 独自関数の定義と利用
    • タイプの表示
    • クラスの利用

4 外部ライブラリの利用

4.1 以下の操作を行っている動画

4.2 外部ライブラリの利用手順

4.2.1 自作のライブラリ作成

  1. 以下の内容でmyadd.hpp作成
    #ifndef MYADD_HPP 
    #define MYADD_HPP
    class MyCalc{
      public:
        int myadd(int a,int b);
        int mysub(int a,int b);
    };
    #endif
    
  2. 以下の内容でmyadd.cpp作成
    #include "myadd.hpp"
    int MyCalc::myadd(int a, int b){
      return a+b;
    }
    
    int MyCalc::mysub(int a, int b){
      return a-b;
    }
    
  3. 以下のコマンドでライブラリファイル作成
    clang++ --shared -fPIC myadd.cpp -o libmyadd.so
    

4.2.2 cppyyを利用して、Pythonで自作C++ライブラリの利用

import cppyy
cppyy.include("myadd.hpp")
cppyy.load_library("./libmyadd.so")
mc=cppyy.gbl.MyCalc()
print(mc.myadd(1,2))
print(mc.mysub(1,2))

4.3 この章のまとめ

  • 自作C++ライブラリを作成し、それをPythonでcppyyライブラリを利用して使ってみた
  • 外部ライブラリも同じ手順でcppyyで利用可能
  • cppyyを利用することで、色々なCやC++の豊富なライブラリを簡単にPythonで利用できるようになった

5 今後

  • 今後も文書追加していきます。

6 この文書のチェンジログ

  • 2020/09/02 初版

著者: NM Max

Created: 2020-09-02 水 19:48

Validate