C 呼叫Python及間接呼叫Python三方庫

2021-10-10 02:46:55 字數 1737 閱讀 1873

本文章目的是脫離安裝python環境的前提下,由c++程式呼叫python程式及python相關三方庫

紅色部分是生成路徑下直譯器執行時依賴

將紅色部分拷貝到c++編譯主exe路徑下即可,並把需要允許的py檔案頁考過去(也就是.py檔案需和編譯生成的.exe檔案放在一起)

藍色部分是vs配置編譯時依賴,需要新增到vs工程的環境中

除此之外,也可以指定環境:

讀取python檔案位置   

程式最終發布的時候,不需要在客戶端機上安裝python,只需要拷貝python檔案的libs,lib庫,include資料夾,dll資料夾等到安裝目錄下,並使用

py_setpythonhome((char*)strpythonlibpath.c_str());指定查詢路徑

在vs

python程式

def testreturn1(s1, s2):

s = s1+s2

return s

def testreturn2(s1):

return s1

c++程式

//***python呼叫***//

//初始化python模組

py_initialize();

// 檢查初始化是否成功

if (!py_isinitialized())

pyobject *pmodule= pyimport_importmodule("helloworld");//python檔名

if (!pmodule)

else

pyobject *pyparams1 = pytuple_new(2);

pytuple_setitem(pyparams1, 0, py_buildvalue("s", "hello "));

pytuple_setitem(pyparams1, 1, py_buildvalue("s", "python"));

char * result1;

pyobject*parg = pyeval_callobject(pfunc, pyparams1);//呼叫函式

pyarg_parse(parg, "s", &result1);

cout << result1 << endl;

pfunc = pyobject_getattrstring(pmodule, "testreturn2");//python檔案中的函式名

if (!pfunc)

pyobject* pyparams3 = py_buildvalue("(i)", 123);

int result2;

parg = pyeval_callobject(pfunc, pyparams3);//呼叫函式

pyarg_parse(parg, "i", &result2);

cout << result2 << endl;

}

結果

redis安裝及python呼叫

1 ubuntu安裝redis sudo apt install redis y2 設定密碼 編輯配置檔案,找到requrepass這行去掉注釋 sudo vim etc redis redis.conf requirepass 123456 去掉注釋,後面的密碼就是redis的密碼 找到bind ...

C 呼叫Python語言

是一種在 net和 mono 上實現的 python 語言 2.開啟vs,新增兩個引用,在ironpython的安裝根目錄下面選擇ironpython.dll和microsoft.scripting.dll using microsoft.scripting.hosting using ironpy...

C 呼叫Python方法

2.3.通過c 呼叫python指令碼,主要利用python提供的api,實際上,c 主要呼叫的是python的直譯器,而python的直譯器本質就是實現在動態鏈結庫裡的,因此在呼叫前後要進行一些初始化和資源釋放的工作,另外,要呼叫python指令碼裡的函式等等,需要使用python提供的一些特殊的...