如何在C++中調(diào)用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。如果沒有這個文件,直接復(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 a else: return b
C++代碼如圖所示
#include <iostream> #include<python.h> #include"stdio.h" using namespace std; int main() { Py_Initialize();//使用python之前,要調(diào)用Py_Initialize();這個函數(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.py if (pModule == NULL) { cout << "沒找到" << endl; } pFunc = PyObject_GetAttrString(pModule, "max");//這里是要調(diào)用的函數(shù)名max PyObject* pParams = Py_BuildValue("(ss)", "3", "4");//兩個字符串參數(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,這個根Py_Initialize相對應(yīng)的。 return 0; }
同時需要把python代碼,即vsdemo.py文件,放到c++項(xiàng)目文件中,然后再運(yùn)行
三、可能會出現(xiàn)的問題
(1)可能會出現(xiàn)找不到python36.dll的錯誤,可以從acaconda中找到該文件,復(fù)制到c++項(xiàng)目文件中即可,如圖所示
總結(jié)
本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
- Python與C++中梯度方向直方圖的實(shí)現(xiàn)
- C++和python實(shí)現(xiàn)單鏈表及其原理
- c++與python實(shí)現(xiàn)二分查找的原理及實(shí)現(xiàn)
- c++和python實(shí)現(xiàn)順序查找實(shí)例
- python?與c++相互調(diào)用實(shí)現(xiàn)
- python直接調(diào)用和使用swig法方調(diào)用c++庫
- 如何利用Python實(shí)現(xiàn)簡單C++程序范圍分析
- C++調(diào)用python(執(zhí)行py文件)的全過程
- C++通過內(nèi)嵌解釋器調(diào)用Python及間接調(diào)用Python三方庫
- Python 調(diào)用 C++ 傳遞numpy 數(shù)據(jù)詳情
相關(guān)文章
C++?Boost?CircularBuffer算法超詳細(xì)精講
Boost是為C++語言標(biāo)準(zhǔn)庫提供擴(kuò)展的一些C++程序庫的總稱。Boost庫是一個可移植、提供源代碼的C++庫,作為標(biāo)準(zhǔn)庫的后備,是C++標(biāo)準(zhǔn)化進(jìn)程的開發(fā)引擎之一,是為C++語言標(biāo)準(zhǔn)庫提供擴(kuò)展的一些C++程序庫的總稱2022-11-11VC6.0代碼自動提示 VC6.0在win7環(huán)境下代碼提示智能化
作為程序猿的你,是否已經(jīng)喜歡或習(xí)慣依賴IDE開發(fā)環(huán)境呢,有了IDE環(huán)境,即使你想不起方法全名,只要知道某個前綴,或哪怕在提示列表中,一一查詢,也可以找到自己想找的方法或?qū)傩?/div> 2013-01-01C語言使用ffmpeg和sdl實(shí)現(xiàn)多路音頻播放
這篇文章主要為大家詳細(xì)介紹了一種基于ffmpeg和sdl實(shí)現(xiàn)的音頻多路混合的方法,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以參考一下2023-06-06最新評論