Visual Studio 2017下C++调用python方法

版本 Visual Studio 2017 +Anaconda3+python3.7.0 64位

1.随便一个地方创建一个C++项目
2.将Anaconda中的 include 和 libs 文件夹复制到创建的项目下(复不复制都一样),Anaconda版本libs文件夹中还缺少一个 python37_d.lib文件,点这下载,密码:dm60(提供的是64位的)。放到libs文件夹中。

Visual Studio 2017下C++调用python方法_第1张图片
Visual Studio 2017下C++调用python方法_第2张图片要是版本不同可以自己下载对应版本的源文件后编译
下载链接
举个例子,我想下载Python3.7.3版本,就将上述网址中的371替换成373,其他Python版本号同上。 打开对应版本网页后,下拉至Files
Visual Studio 2017下C++调用python方法_第3张图片
(1)第一个框起来的就是Python源码(下载文件后缀是.tar.xz),第二个框起来的是Windows64位安装包(下载文件后缀是.exe)
Visual Studio 2017下C++调用python方法_第4张图片

(2)解压下载好的Python源码,打开找到PCbuild->pcbuild.sln,用刚安装好的VS打开。
打开后Visual Studio 2017下C++调用python方法_第5张图片
(2)点击菜单栏 生成->配置管理器,如图所示:只勾选所有p开头的项目,配置:debug,平台:Win32(根据自己的python版本我的是×64)。点击关闭。
Visual Studio 2017下C++调用python方法_第6张图片
(3)之后,点击 项目 -> 属性 -> 属性配置 -> 常规,要选择一个Windows SDK版本
Visual Studio 2017下C++调用python方法_第7张图片
然后菜单栏 生成->重新生成解决方案
等待几分钟,生成之后,回到PCbuild文件夹中,就会看到多出来一个Win32(我的是arm64)文件夹,打开,即可找到Python37_d.libVisual Studio 2017下C++调用python方法_第8张图片

3.VS环境配置 打开项目——>属性
进行配置,根据自己文件路径调整
Visual Studio 2017下C++调用python方法_第9张图片
Visual Studio 2017下C++调用python方法_第10张图片
Visual Studio 2017下C++调用python方法_第11张图片
Visual Studio 2017下C++调用python方法_第12张图片
在这里插入图片描述

4测试程序
主文件

#include 
#include

using namespace std;

int main()
{

	Py_SetPythonHome(L"D:\\Anaconda");
	/**
	这句语句是在添加python.exe所在路径,不添加虽然编译没有问题,但是会在运行时出现
	Fatal Python error: initfsencoding: unable to load the file system codec
	ModuleNotFoundError: No module named 'encodings'
	这种很无厘头的错误
	**/
	Py_Initialize();//使用python之前,要调用Py_Initialize();这个函数进行初始化
	if (!Py_IsInitialized())
	{
		printf("初始化失败!");
		return 0;
	}
	else {
		PyRun_SimpleString("import sys");
		PyRun_SimpleString("sys.path.append('./')");//这一步很重要,修改Python路径


		PyObject * pModule = NULL;//声明变量
		PyObject * pFunc = NULL;// 声明变量

		pModule = PyImport_ImportModule("hello");//这里是要调用的文件名hello.py
		if (pModule == NULL)
		{
			cout << "没找到该Python文件" << endl;
		}
		else {
			pFunc = PyObject_GetAttrString(pModule, "add");//这里是要调用的函数名
			PyObject* args = Py_BuildValue("(ii)", 28, 103);//给python函数参数赋值

			PyObject* pRet = PyObject_CallObject(pFunc, args);//调用函数

			int res = 0;
			PyArg_Parse(pRet, "i", &res);//转换返回类型

			cout << "res:" << res << endl;//输出结果
		}
		Py_Finalize();//调用Py_Finalize,这个根Py_Initialize相对应的。
	}
	return 0;
}

然后创建一个python文件 hello.py

def add(a,b):  
    print ("These consequences are from Python code.")  
    print ("a = " + str(a))  
    print ("b = " + str(b))  
    print ("ret = " + str(a+b))  
    return a + b

和主文件放到一起
Visual Studio 2017下C++调用python方法_第13张图片
5此时要是运行测试文件就会出现
Visual Studio 2017下C++调用python方法_第14张图片
这个是因为安装python的时候没有勾选debug选项的后果
Visual Studio 2017下C++调用python方法_第15张图片
要是版本相同可以用我提供的
下载点击
密码:g3s0
解压后放到Anaconda中就好(重复文件选择跳过)Visual Studio 2017下C++调用python方法_第16张图片

要是版本不对也可以自己重新修改python的安装将debug勾选上就好
将这些也是放到Anaconda中
Visual Studio 2017下C++调用python方法_第17张图片
正确输出
Visual Studio 2017下C++调用python方法_第18张图片
恭喜搞定了
参考

你可能感兴趣的:(C++调用python,c++,python)