如何在C++中调用python代码
一、環(huán)境設(shè)置
windows
VS2015
python的話用的是acaconda自帶的python環(huán)境,不同版本的acaconda自帶的python不同,我的是python3.6(這一步很重要,如果使用acaconda創(chuàng)建的虛擬環(huán)境的python,可能會不成功)
二、VS項(xiàng)目中設(shè)置
(1)首先在acaconda中找到include文件夾和libs文件夾,如圖所示
?
然后右擊C++項(xiàng)目,選擇屬性,點(diǎn)擊VC++目錄,然后在包含目錄中添加include文件夾,在庫目錄中添加libs文件夾
(2)點(diǎn)擊鏈接器,然后輸入,附加依賴項(xiàng),添加python36_d.lib的路徑?
?因?yàn)榕渲脼镈ebug,所以是添加python36_d.lib,而不是python36.lib。如果沒有這個(gè)文件,直接復(fù)制python36.lib,然后命名為python36_d.lib即可。如圖所示
(3)python代碼
? ? ? 想要在C++代碼中調(diào)用python中的vsdemo.py的max函數(shù),首先python代碼如圖所示
def max(a,b):if a>b:return aelse:return bC++代碼如圖所示
#include <iostream> #include<python.h> #include"stdio.h" using namespace std; int main() {Py_Initialize();//使用python之前,要調(diào)用Py_Initialize();這個(gè)函數(shù)進(jìn)行初始化if (!Py_IsInitialized()){printf("初始化失敗!");return 0;}PyRun_SimpleString("import sys");PyRun_SimpleString("sys.path.append('./')");//這一步很重要,修改Python路徑PyObject* pModule = NULL;//聲明變量PyObject* pFunc = NULL;// 聲明變量pModule = PyImport_ImportModule("vsdemo");//這里是要調(diào)用的文件名vsdemo.pyif (pModule == NULL){cout << "沒找到" << endl;}pFunc = PyObject_GetAttrString(pModule, "max");//這里是要調(diào)用的函數(shù)名maxPyObject* pParams = Py_BuildValue("(ss)", "3", "4");//兩個(gè)字符串參數(shù)char* result;PyObject* pRet = PyObject_CallObject(pFunc, pParams);//調(diào)用函數(shù) pRet是得到的結(jié)果int res = 0;PyArg_Parse(pRet, "s", &result);//轉(zhuǎn)換結(jié)果的返回類型cout << "res:" << result << endl;//輸出結(jié)果system("pause");Py_Finalize();//調(diào)用Py_Finalize,這個(gè)根Py_Initialize相對應(yīng)的。return 0;},同時(shí)需要把python代碼,即vsdemo.py文件,放到c++項(xiàng)目文件中,然后再運(yùn)行
?三、可能會出現(xiàn)的問題
(1)可能會出現(xiàn)找不到python36.dll的錯(cuò)誤,可以從acaconda中找到該文件,復(fù)制到c++項(xiàng)目文件中即可,如圖所示
?
總結(jié)
以上是生活随笔為你收集整理的如何在C++中调用python代码的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java车牌号识别EasyPR_Easy
- 下一篇: 如何用安卓手机运行Python代码