摘要:在實際開發過程中,免不了涉及到混合程式設計,比如,對於python這種指令碼語言,效能還是有限的,在一些對效能要求高的情景下面,還是需要使用c/c++來完成。在實際開發過程中,免不了涉及到混合程式設計,比如,對於python這種指令碼語言,效能還是有限的,在一些對效能要求高的情景下面,還是需要使用c/c++來完成。那怎樣做呢?我們能使用pybind11作為橋梁,pybind11的優點是對c++ 11支援很好,api比較簡單,現在我們就簡單記下pybind11的入門操作。
pybind11 是乙個輕量級只包含標頭檔案的庫,用於 python 和 c++ 之間介面轉換,可以為現有的 c++ **建立 python 介面繫結。pybind11 通過 c++ 編譯時的自省來推斷型別資訊,來最大程度地減少傳統拓展 python 模組時繁雜的樣板**, 已經實現了 stl 資料結構、智慧型指標、類、函式過載、例項方法等到python的轉換,其中函式可以接收和返回自定義資料型別的值、指標或引用。
直接使用pip安裝首先,我們編寫乙個c++原始檔,命名為example.cpp。pip3 install pybind11
由於pybind11依賴於pytest,所以在安裝前需要先把pytest給安裝上
pip3 install pytest
//pybind11_module()巨集函式將會建立乙個函式,在由python發起import語句時該函式將會被呼叫。模組名字「example」,由巨集的第乙個引數指定(千萬不能出現引號)。第二個引數"m",定義了乙個py::module的變數。函式py::module::def()生成繫結**,將add()函式暴露給python。pybind11 標頭檔案和命名空間
#include namespace py =pybind11;
int add(int i, int
j)pybind11_module(example, m)
我們使用cmake進行編譯。首先寫乙個cmakelists.txt。
cmake_minimum_required(version 2.8.12就是cmakelist.txt和example.cpp放在乙個目錄下面。)project(example)
add_subdirectory(pybind11)
pybind11_add_module(example example.cpp)
cmake .會生成example.cpython-36m-x86_64-linux-gnu.so檔案。make
這個檔案就是python可以呼叫的檔案。還是在相同目錄下執行python,進入python命令列
import example在使用python程式設計時,常使用內建容器作為函式的引數和返回值,python語言的這種特性使我們的程式變得非常靈活和易於理解。那麼在使用pybind11封裝c++實現的函式的時候,如何保留這一特性呢?本文介紹pybind11實現list和dict作為引數及返回值的方法。example.add(
3, 4)[
out]: 7
檔名:func.cpp
#include "
func.h
"vector
list_square(vector &in_list, vector&out_list)
return
out_list;
}
map dict_square(map& in_dict, map&out_dict));
iter++;
} return
out_dict;
}
//#include #include
#include
"func.h
"pybind11_module(square, m)
#include #includestruct
foo ;
void
show(foo f)
namespace py =pybind11;
pybind11_plugin(example)
import sys".點選關注,第一時間了解華為雲新鮮技術~")import example
b =example.foo
b.a = "
hello
"example.show(b)
混合程式設計 如何用python11呼叫C
摘要 在實際開發過程中,免不了涉及到混合程式設計,比如,對於python這種指令碼語言,效能還是有限的,在一些對效能要求高的情景下面,還是需要使用c c 來完成。那怎樣做呢?我們能使用pybind11作為橋梁,pybind11的優點是對c 11支援很好,api比較簡單,現在我們就簡單記下pybind...
python呼叫c 介面 pybind11
pybind11是乙個將c 介面轉接給python的庫,它支援c 11標準的編譯器。這裡我做了乙個簡單的實驗,主要是驗證將eigen matrixxf型別對映到numpy ndarray型別,這樣就可以在python愉快地呼叫c 函式了。完整 見 首先,python指令碼 usr bin env p...
python利用pybind11呼叫PCL點雲庫
2019年7月9日14 31 13 完成了乙個簡單的小例子,python生成點雲資料,利用pybind11傳給pcl顯示。ubuntu 16.04 anaconda3 python3.6 pcl 1.8 pybind11 效果圖如下 搞深度估計,一直需要點雲庫pcl的python介面,未來還需要用到...