本人環境:
Windows10;
python3.7.4;
visual studio 2019;
安裝python,opencv(如果用到的話),以及將二者目錄添加到vs中的包含目錄和庫目錄就不再說了。教程一大堆,自己配置好。以下步驟都建立在這些環境配置成功之后。
重要:
將Python安裝目錄下的include和libs文件夾引入到項目中
將libs目錄下的python37.lib復制一份為python37_d.lib
一、Python腳本
這個python腳本和C++編譯成功后生成的.exe文件放在同一目錄下。
def Hello():
print("Hello")
def Add(a,b):
return a+b
二、C++調用python腳本
#include <Python.h>
using namespace std;
int main()
{
Py_Initialize(); //初始化,創建一個Python虛擬環境
if (Py_IsInitialized())
{
PyObject* pModule = NULL;
PyObject* pFunc = NULL;
pModule = PyImport_ImportModule("test_python"); //參數為Python腳本的文件名
if (pModule)
{
pFunc = PyObject_GetAttrString(pModule, "Hello"); //獲取函數
PyEval_CallObject(pFunc, NULL); //執行函數
}
else
{
printf("導入Python模塊失敗...\n");
}
}
else
{
printf("Python環境初始化失敗...\n");
}
Py_Finalize();
}
需要將Python安裝目錄下的Lib和Dlls放到程序運行目錄下,並添加Python37.dll到運行目錄即可(我是這么做的)。
運行結果:

ok,成功調用python腳本。
附上C++調用python的一些規范化語句:
#include<Python.h> //添加python的聲明
using namespace std;
int main()
{
Py_Initialize(); //1、初始化python接口
//初始化使用的變量
PyObject* pModule = NULL;
PyObject* pFunc = NULL;
PyObject* pName = NULL;
//2、初始化python系統文件路徑,保證可以訪問到 .py文件
PyRun_SimpleString("import sys");
PyRun_SimpleString("sys.path.append('./')");
//3、調用python文件名。當前的測試python文件名是test.py。在使用這個函數的時候,只需要寫文件的名稱就可以了。不用寫后綴。
pModule = PyImport_ImportModule("test");
//4、調用函數
pFunc = PyObject_GetAttrString(pModule, "AdditionFc");
//5、給python傳參數
PyObject* pArgs = PyTuple_New(2);//函數調用的參數傳遞均是以元組的形式打包的,2表示參數個數。如果AdditionFc中只有一個參數時,寫1就可以了。這里只先介紹函數必須有參數存在的情況。
PyTuple_SetItem(pArgs, 0, Py_BuildValue("i", 2)); //0:表示序號。第一個參數。
PyTuple_SetItem(pArgs, 1, Py_BuildValue("i", 4)); //1:也表示序號。第二個參數。i:表示傳入的參數類型是int類型。
//6、使用C++的python接口調用該函數
PyObject* pReturn = PyEval_CallObject(pFunc, pArgs);
//7、接收python計算好的返回值
int nResult;
PyArg_Parse(pReturn, "i", &nResult);//i表示轉換成int型變量。在這里,最需要注意的是:PyArg_Parse的最后一個參數,必須加上“&”符號。
//8、結束python接口初始化
Py_Finalize();
}
