前言:

在做一个项目时,需要在c++工程中调用python脚本并获得返回值。

所以选择先做一个demo来进行链接,但是在环境配置时遇到了很多的问题,也踩了不少坑。

网上教程比较零散,现将成功链接的最简单配置方法记录

注:

用anaconda中的python环境进行配置时总是缺文件,或找不到路径。所以这里我新装了3.8.10版本python进行测试。

vs配置anaconda中python环境目前还没找到解决方案

Python3.8.10下载:

https://www.python.org/downloads/release/python-3810/

 

Step1.导入#include<Python.h>

这时我们发现报错,如图所示

c 如何执行python文件 c++执行python脚本_Python

 

解决方法:右键项目打开工程属性

请注意:这里我们配置的平台是x64

c 如何执行python文件 c++执行python脚本_Python_02

 

 

 

Step2.c++常规附加包含目录添加Python路径下的include文件

c 如何执行python文件 c++执行python脚本_c 如何执行python文件_03

 

Step3.vc++目录可执行文件目录和库目录分别添加include和libs文件夹

c 如何执行python文件 c++执行python脚本_c 如何执行python文件_04

 

此时发现#include<Python.h>已经不报错。

 

Step4.写一段测试代码;

首先是python代码:

#做一个相加函数
def Add(a, b):
    return a + b

存为demo.py文件后放在工程目录下,无需编译

然后是c++代码:

#include<Python.h> 
#include<iostream>
using namespace std;

int main()
{
    Py_Initialize();

    PyObject* pModule = NULL;
    PyObject* pFunc = NULL;
    PyObject* pName = NULL;

    //2、初始化python系统文件路径,保证可以访问到 .py文件
    PyRun_SimpleString("import sys");
    PyRun_SimpleString("sys.path.append('./')");

    //3、调用python文件名。当前的测试python文件名是demo.py。在使用这个函数的时候,只需要写文件的名称就可以了。不用写后缀。
    pModule = PyImport_ImportModule("demo");

    //4、调用函数
    pFunc = PyObject_GetAttrString(pModule, "Add");

    //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的最后一个参数,必须加上“&”符号。
    
    cout << nResult;
    //8、结束python接口初始化
    Py_Finalize();
    return 0;
}

Step5.运行c++程序,发现报错:

c 如何执行python文件 c++执行python脚本_Python_05

 

 解决方法:由于各种原因系统删掉了python38_d.dll,在python安装路径下找到python38_d.dll复制粘贴到到C:\Windows\System32\

 

Step6:再次运行

c 如何执行python文件 c++执行python脚本_c 如何执行python文件_06

 

 

 已经可以运行,并得到了运行结果2+4=6

 

 

结尾:这个配置只是最简单的测试了下连接的可行性,后续测试还没有做。欢迎学习交流,如有错误,欢迎留言批评指正