python呼叫c/c++有不少的方法,如boost.python, swig, ctypes, pybind11等,這些方法有繁有簡,而pybind11的優點是對c++ 11支援很好,api比較簡單,現在我們就簡單記下pybind11的入門操作。
mkdir
build
cdbuild
cmake..
cmake--
build.-
-config
release--
target
check
如果所有測試用例都通過了,說明安裝成功了。
#include
namespace py = pybind11;
int add(int i, int j)
pybind11_module(example, m)
然後,在windows下使用工具vs2015 x86 native tools command prompt
(因為我的python是32位版本,如果是64位版本的,請使用vs2015 x64 native tools command prompt
)進行編譯:
cl example.cpp /i "h:/allfiles/pybind11/include" /i "c:/python27/include" /ld /fe:example.pyd /link/libpath:"c:/python27/libs/"
編譯成功後,會在example.cpp
相同目錄下生成example.pyd
檔案,這個就是python可以直接匯入的庫,執行:
import example
example.add(3, 4)
[out]: 7
有了編譯成功的模組,便可以使用我在另一篇部落格python模組搜尋路徑中提到的方法,將其用.pth或者pythonpath的方法加入到python搜尋路徑,以後在我們自己的環境中就可以隨時隨地使用這個模組啦。
當然,我們也可以使用cmake進行編譯。首先寫乙個cmakelists.txt
cmake_minimum_required
(version
2.8.12)
project
(example)
add_subdirectory
(pybind11)
pybind11_add_module
(example example.cpp)
這裡要求example.cpp放在和pybind11同一級的目錄下,然後cmake,便會生成乙個vs 2015的工程檔案,用vs開啟工程檔案進行build,就可以生成example.pyd
了。
使用pybind11,也很容易從c++裡呼叫python指令碼:
首先,我們用vs 2015新建乙個工程,並且將python的包含目錄和庫目錄,以及pybind11的包含目錄配置到工程,我的配置如下:
然後,新建乙個原始檔example.cpp
:
#include
#include
namespace py = pybind11;
int main()
最後,在工程目錄下加入指令碼example.py
:
def
add(i, j):
print("hello, pybind11")
return i+j
執行工程,得到如下的結果:
執行成功!!!
本文中我們簡單介紹了怎麼使用pybind11進行python和c++的相互呼叫,這些只是入門級別的例子,但是可以work了,這很重要。深入進行研究使用,還是等以後用到再說吧。
參考文獻
pybind11 github
pybind11 tutorial
c++與python的互操作
building and testing a hybrid python/c++ package
Python路上之Python呼叫C
1 c 類檔案 pycallclass.cpp include using namespace std class testlib void testlib display void display int int a 可以由python呼叫的關鍵,只能呼叫c函式,但可以通過上述方式將c 中的類方法...
C 呼叫Python及間接呼叫Python三方庫
本文章目的是脫離安裝python環境的前提下,由c 程式呼叫python程式及python相關三方庫 紅色部分是生成路徑下直譯器執行時依賴 將紅色部分拷貝到c 編譯主exe路徑下即可,並把需要允許的py檔案頁考過去 也就是.py檔案需和編譯生成的.exe檔案放在一起 藍色部分是vs配置編譯時依賴,需...
Python之方法呼叫
python中類的方法有兩種形式 繫結的概念主要與方法呼叫相關聯,方法是類內部定義的函式 這意味著方法是類屬性而不是例項屬性 方法只有在其所屬的類擁有例項時,才能被呼叫,當存在乙個例項時,方法才被認為是繫結到那個例項了。任何乙個方法定義中的第乙個引數都是self變數,表示呼叫此方法的例項物件。cla...