VS2022+Python3.11實(shí)現(xiàn)C++調(diào)用python接口
查了一些資料,不是報這個錯,就是報哪個錯,沒有找到和我安裝的環(huán)境的一致的案例,于是將自己的摸索分享出來。
一、環(huán)境準(zhǔn)備
1、Visual Studio 2022,下載地址:https://visualstudio.microsoft.com/zh-hans/downloads/

2、Python版本是3.11,下載地址:https://www.python.org/downloads/

3、安裝Visual Studio 2022和Python3.11
安裝過程簡單,此處不再贅述,我們的重點(diǎn)是看如何實(shí)現(xiàn)接口調(diào)用的。
二、配置Visual Studio 2022
安裝好環(huán)境后,使用Visual Studio 2022創(chuàng)建一個新項(xiàng)目,我這里取名c++python。需要配置3個地方:
1、右擊項(xiàng)目名稱-->屬性,選擇VC++目錄,根據(jù)python安裝路徑,配置包含目錄和庫目錄。python安裝路徑怎么查看?打開cmd,輸入python回車,使用如下兩個命令即可看到python路徑。
>>> import sys >>> sys.path
將python安裝路徑下的include文件夾和libs文件夾復(fù)制到剛才新建的項(xiàng)目c++python目錄下,配置如圖所示:

2、右擊項(xiàng)目名稱-->屬性,選擇C/C++下的常規(guī),配置附加包含目錄,加上項(xiàng)目中include的路徑,如圖所示:

3、右擊項(xiàng)目名稱-->屬性,選擇鏈接器下的輸入,配置附加依賴項(xiàng),將項(xiàng)目中的libs目錄中python311.lib復(fù)制一份,改名為python311_d.lib,附加依賴項(xiàng)的內(nèi)容填寫C:\Users\source\repos\c++python\libs\python311_d.lib;如圖所示:

三、編寫python代碼和C++代碼
1. 首先,創(chuàng)建一個名為test_python.py的Python文件,內(nèi)容如下:
def add(a, b):
return a + b2. 然后,創(chuàng)建一個名為main.cpp的C++文件,內(nèi)容如下:
#include <iostream>
#include <Python.h>
int main()
{
/*初始化python*/
Py_Initialize();
/*初始化python系統(tǒng)文件路徑,否則加載不到要調(diào)用的test_python.py文件*/
PyRun_SimpleString("import sys");
PyRun_SimpleString("sys.path.append('./')");
/*加載要調(diào)用的python文件名稱,當(dāng)前測試文件名稱:test_python.py*/
PyObject* pName = PyUnicode_DecodeFSDefault("test_python");
PyObject* pModule = PyImport_Import(pName);
Py_XDECREF(pName);
if (pModule != NULL)
{
/*加載python模塊中的函數(shù)*/
PyObject* pFunc = PyObject_GetAttrString(pModule, "add");
if (PyCallable_Check(pFunc))
{
/*給pythonm模塊中的函數(shù)add傳遞2個參數(shù),以元組的形式傳遞*/
PyObject* pArgs = PyTuple_New(2);
/*給add函數(shù)傳遞第一個參數(shù)6*/
PyTuple_SetItem(pArgs, 0, PyLong_FromLong(6));
/*給add函數(shù)傳遞第二個參數(shù)10*/
PyTuple_SetItem(pArgs, 1, PyLong_FromLong(10));
/*C++的python接口調(diào)用add函數(shù),返回計算結(jié)果*/
PyObject* pValue = PyObject_CallObject(pFunc, pArgs);
Py_XDECREF(pArgs);
if (pValue != NULL)
{
/*打印計算結(jié)果*/
std::cout << "\n " << std::endl;
std::cout << "Result of call: " << PyLong_AsLong(pValue) << std::endl;
std::cout << "\n " << std::endl;
Py_XDECREF(pValue);
}
else
{
PyErr_Print();
}
}
else
{
if (PyErr_Occurred())
{
PyErr_Print();
}
fprintf(stderr, "Cannot find function \"add\"");
}
Py_XDECREF(pFunc);
Py_XDECREF(pModule);
}
else
{
PyErr_Print();
fprintf(stderr, "Failed to load \"%s\"", "test");
return 1;
}
/*結(jié)束python初始化*/
Py_Finalize();
return 0;
}
test_python.py和main.cpp在同一目錄,如圖所示:

3. 編譯
1>正在生成代碼
1>Previous IPDB not found, fall back to full compilation.
1>All 16 functions were compiled because no usable IPDB/IOBJ from previous compilation was found.
1>已完成代碼的生成
1>c++python.vcxproj -> C:\Users\source\repos\c++python\x64\Release\c++python.exe
========== “全部重新生成”: 1 成功,0 失敗,0已跳過 ==========
========== 占用時間 00:02.052 ==========
4. 點(diǎn)擊菜單"調(diào)試-->開始執(zhí)行(不調(diào)試)運(yùn)行,可以看到輸出結(jié)果:

到此這篇關(guān)于VS2022+Python3.11實(shí)現(xiàn)C++調(diào)用python接口的文章就介紹到這了,更多相關(guān)C++調(diào)用python接口內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python調(diào)用百度OCR實(shí)現(xiàn)圖片文字識別的示例代碼
這篇文章主要介紹了Python調(diào)用百度OCR實(shí)現(xiàn)圖片文字識別的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07
Python+Selenium瀏覽器自動化測試與網(wǎng)頁自動登錄
在日常開發(fā)、測試和辦公自動化中,我們經(jīng)常會遇到一些重復(fù)性的瀏覽器操作,如果這些操作每天都要重復(fù)執(zhí)行,手動處理不僅浪費(fèi)時間,還容易因?yàn)槁c(diǎn)、輸錯、忘記截圖而出錯,本文面向Python自動化測試初學(xué)者,通過一個完整案例講解如何使用Selenium自動打開網(wǎng)頁2026-05-05
利用pyuic5將ui文件轉(zhuǎn)換為py文件的方法
今天小編就為大家分享一篇利用pyuic5將ui文件轉(zhuǎn)換為py文件的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-06-06
基于python爬取梨視頻實(shí)現(xiàn)過程解析
這篇文章主要介紹了基于python爬取梨視頻實(shí)現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-11-11
關(guān)于Python調(diào)用百度語音合成SDK實(shí)現(xiàn)文字轉(zhuǎn)音頻的方法
這篇文章主要介紹了關(guān)于Python調(diào)用百度語音合成SDK實(shí)現(xiàn)文字轉(zhuǎn)音頻的方法,AipSpeech是語音合成的Python?SDK客戶端,為使用語音合成的開發(fā)人員提供了一系列的交互方法,需要的朋友可以參考下2023-07-07
Python大數(shù)據(jù)用Numpy Array的原因解讀
一個Numpy數(shù)組由許多值組成,所有值的類型是相同的,Numpy 是Python科學(xué)計算的一個核心模塊,本文重點(diǎn)給大家介紹Python大數(shù)據(jù)Numpy Array的相關(guān)知識,感興趣的朋友一起看看吧2022-02-02

